在C语言中会发生什么:
char buf[50]="";
c = fgetc(file);
buf[strlen(buf)] = c+'\0';
buf[0] = '\0';
我在循环中使用了一些代码并在buf中查找旧值 我只想将c添加到buf
我知道我可以这样做:
char s=[5];
s[0]=c;
s[1]='\0';
strcat(buf, s);
将char添加到buf,但我想知道为什么上面的代码没有工作。
答案 0 :(得分:3)
为什么会起作用?
char buf[50]="";
将第一个元素初始化为'\0'
,strlen(buf)
因此为0
。
'\0'
是一种说法0
的奇特方式,所以c+'\0'==c
,所以你正在做的是
buf[0]=c;
buf[0]=0;
没有任何意义。
中最后两行的复合效果
char buf[50]="";
c = fgetc(file);
buf[strlen(buf)] = c+'\0';
buf[0] = '\0';
是无操作。
答案 1 :(得分:1)
此:
buf[strlen(buf)] = c+'\0';
将导致:
buf[strlen(buf)] = c;
意味着不会发生任何增加。
因此,会发生什么:
buf[0] = c;
因为strlen(buf)
为0。
此:
buf[0] = '\0';
将空终结符放在字符串的开头,覆盖c
(您刚刚分配给buf[0]
)。因此,它会将buf
重置为""
。
答案 2 :(得分:0)
可能他们想要buf[strlen(buf)] = c+'\0';
buf[length_of_the_string_stored_in_the_buf_table] = c;
buf[length_of_the_string_stored_in_the_buf_table + 1] = 0;
删除最后一个字符
char *delchar(char *s)
{
int len = strlen(s);
if (len)
{
s[len - 1] = 0;
}
return s;
}