【问题标题】:Use of pointers in a typedef struct which contains a string of characters在包含字符串的 typedef 结构中使用指针
【发布时间】:2019-06-13 16:02:19
【问题描述】:

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

  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;
}

【问题讨论】:

    标签: c function pointers linked-list typedef


    【解决方案1】:
    svec->v[cur]='\0'; strcat(svec->v,CHG);
    

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

    来自 ma​​n strcat:

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

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

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

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

    希望对您有所帮助!

    【讨论】:

    • 谢谢!非常感谢:)
    猜你喜欢
    • 2018-05-24
    • 1970-01-01
    • 2020-10-30
    • 2012-05-13
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多