gpt4 book ai didi

c - 在包含字符串的 typedef 结构中使用指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:16 24 4
gpt4 key购买 nike

我想编写一个名为“替换”的函数作为参数传递:

  1. 链表“l”,每个节点都有一个字符(“lchar”)。
  2. 一串字符“CHG”
  3. 一个字符“CH”
  4. 包含最终字符串的“vec”结构。

该函数一次扫描链表上的每个字符,并将与作为参数传递的字符 CH 不同的链表字符写入“vec”,但是当它扫描链表上的确切 CH 字符时列表,它在“vec”上写入字符串“CHG”。

下面是我的课本给出的解法。整个程序好像看懂了,但是函数扫描字符CH时的那段话看不懂:

svec->v[cur]='\0'; strcat(svec->v,CHG);

它具体是做什么的?为什么我们要为“svec”使用指针?为什么要写成 svec->v[cur]=l->lchar; 因为我们处理的是一串字符?

解决方案:

struct el {
struct el *next;
char lchar;
};
struct el *l=NULL;

typedef struct {
int size;
char *v;
} vec;
vec svec;

int substitution (struct el *l, char *CHG, char CH, vec *svec) {
\\ initialize svec in the dynamic memory
int cur=0;
while (l!=NULL) {
if (l->lchar !=CH) {
svec->v[cur]=l->lchar;
cur++;
l=l->next;
} else {
svec->v[cur]='\0';
strcat(svec->v,CHG);
cur=cur+strlen(CHG);
l=l->next;
}
}
svec->v[cur]='\0';
return 1;
}

最佳答案

svec->v[cur]='\0'; strcat(svec->v,CHG);

这会将 svec->v char* 上 [cur] 位置的 char 替换为终止空字节,以便在其上使用 strcat。

来自 ma​​n strcat :

The strcat() function appends the src string to the dest string, overwriting the terminating null byte ('\0') at the end of dest, and then adds a terminating null byte.

如果 strcat 的“dest char *”缺少终止空字节,则 strcat 行为不可预测。它用作安全。

 svec->v[cur]=l->lchar;

它是这样写的,因为“svec”和“l”是指针,因此,您需要尊重它们才能访问它们的数据。

希望对您有所帮助!

关于c - 在包含字符串的 typedef 结构中使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com