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

C 在包含字符串的typedef结构中使用指针,c,function,pointers,linked-list,typedef,C,Function,Pointers,Linked List,Typedef,我想编写一个名为“substitution”的函数,作为参数传递: 一个链表“l”,每个节点上都有一个字符(“lchar”) 字符串“CHG” “CH”字 包含最终字符串的“vec”结构 函数每次扫描链表上的每个字符,并在“vec”上写入链表中与作为参数传递的字符CH不同的字符,但当它扫描链表上的确切CH字符时,会在“vec”上写入字符串“CHG” 以下是我的教科书给出的解决方案。我似乎理解整个程序,但当函数扫描字符CH时,我无法理解这段文字: svec->v[cur]='\0';strcat(

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

  • 一个链表“l”,每个节点上都有一个字符(“lchar”)
  • 字符串“CHG”
  • “CH”字
  • 包含最终字符串的“vec”结构
  • 函数每次扫描链表上的每个字符,并在“vec”上写入链表中与作为参数传递的字符CH不同的字符,但当它扫描链表上的确切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 char*上[cur]位置的字符替换为终止的空字节,以便在其上使用strcat

    来自曼斯特卡特:

    函数的作用是:将src字符串追加到dest字符串,覆盖终止字符串 空字节('\0'),然后添加一个终止的空字节

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

     svec->v[cur]=l->lchar;
    
    它是这样写的,因为“svec”和“l”是指针,因此,为了访问它们的数据,您需要遵从它们


    希望有帮助

    谢谢大家!!非常感谢:)
     svec->v[cur]=l->lchar;