我需要打开一个文件,找到用户给定的“变量”,然后在新文件中写入找到它的那一行。我尝试保存一整行,保存后附加\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;
}
1条答案
按热度按时间z9zf31ra1#
你连接的是一个长度为零的字符串,它什么也不做。记住,
\0
或NUL不是C字符串的一部分,它是C字符串的 * 终止符 *。如果它不存在,strncat
将不会像你期望的那样操作,它将继续寻找结尾,然后在那里什么也不加。或者如果没有发现NUL,则它将提前终止。在这两种情况下,结果是相同的。这里应该做的是
line[j] = 0
,以便在阅读后正确终止字符串。不要认为C数组是你可以追加的东西,它有一个固有的大小。它们有一个 * 固定的大小 *,并且完全填充了值,即使这些值是未初始化的。当你“追加”到一个C字符串时,你实际上只是在一个预先存在的缓冲区中写入一个特定的偏移量。
strncat()
只是寻找适当的位置来追加。