我创建一个函数来计算字符串第一行的字符数。如果字符串只有一行长,那么它会计算字符数,直到终止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;
}
答案 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时停止。