C:字符串和'\ 0'中的字符之间的比较不起作用?

时间:2011-03-13 13:09:01

标签: c null comparison character

我创建一个函数来计算字符串第一行的字符数。如果字符串只有一行长,那么它会计算字符数,直到终止null \ 0。将ch字符与\ n进行比较的部分按预期工作,但我无法成功将ch字符与\ 0进行比较。即使我在字符串中添加了几个\ 0,它也永远不会满足比较。有什么想法吗?

#include <stdio.h>

int main() {
    /*variables*/
    char* string="shit\nand\npee\0";
    int bytesRead=0;
    int bytesTemp=0;
    char ch=' ';

    /*find the number of characters before a newline or end of string*/
    while(ch!='\n') { //doesn't work with ch!='\0'
        sscanf(string+bytesRead, "%c%n", &ch, &bytesTemp);
        bytesRead+=bytesTemp;
        printf("Bytes read: %d\n", bytesRead);
        printf("Variable ch has value: %c\n", ch);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

问题是您没有测试sscanf的返回值。如果失败,ch更新,因此您将获取最后一个符号两次,然后读取超过该字符串的结尾。

尝试使用以下内容:

if (sscanf(string+bytesRead, "%c%n", &ch, &bytesTemp) != 1)
  break;

答案 1 :(得分:0)

您也可以避免使用sscanf并执行以下操作:

while((ch = *string) != '\n' && ch != '\0') {
  bytesRead++;
  printf("Bytes read: %d\n", bytesRead);
  printf("Variable ch has value: %c\n", ch);
  string++;
}

当它看到\ n或\ 0时停止。