将带有null终止符的char添加到C中的字符串

时间:2017-08-12 18:46:54

标签: c string null char terminator

在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,但我想知道为什么上面的代码没有工作。

3 个答案:

答案 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;
}