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

时间:2019-01-19 18:20:38

标签: c function pointers linked-list typedef

我想编写一个称为“ substitution”的函数作为参数传递:

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

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

以下是我的教科书给出的解决方案。我似乎了解整个程序,但是当函数扫描字符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;
}

1 个答案:

答案 0 :(得分:1)

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

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

来自 man strcat:

  

strcat()函数将src字符串附加到dest字符串,覆盖终止符          dest末尾为空字节('\ 0'),然后添加一个终止的空字节。

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

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

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

希望有帮助!