使用strncat向字符串插入值

ogsagwnx  于 2023-03-07  发布在  其他
关注(0)|答案(1)|浏览(158)

我需要打开一个文件,找到用户给定的“变量”,然后在新文件中写入找到它的那一行。我尝试保存一整行,保存后附加\0,然后使用strncmp进行比较。
但是,我在将\0插入到行中时遇到了麻烦。为了使它工作,我需要更改什么?

char line[500];
    char *finLin = "\0"; 
   
    while (i < readBytes) {
            i++;

            // Line is saved.
            while(buffer[i] != '\n' && i < readBytes){
                line[j] = buffer[i];
                i++;
                j++;
            }

            // Add '\0' to the line.
            strncat(line, finLin, 2);

            // Use strcmp to compare. If the variable is found, it is written.
            if(strncmp(line, var, n) == 0){
                write(status2, line, strlen(line));
                printf("%s \n", line);
            }

            // Reset counter.
            j = 0;
        }
z9zf31ra

z9zf31ra1#

你连接的是一个长度为零的字符串,它什么也不做。记住,\0或NUL不是C字符串的一部分,它是C字符串的 * 终止符 *。如果它不存在,strncat将不会像你期望的那样操作,它将继续寻找结尾,然后在那里什么也不加。或者如果没有发现NUL,则它将提前终止。在这两种情况下,结果是相同的。
这里应该做的是line[j] = 0,以便在阅读后正确终止字符串。
不要认为C数组是你可以追加的东西,它有一个固有的大小。它们有一个 * 固定的大小 *,并且完全填充了值,即使这些值是未初始化的。当你“追加”到一个C字符串时,你实际上只是在一个预先存在的缓冲区中写入一个特定的偏移量。strncat()只是寻找适当的位置来追加。

相关问题