2017-08-12 96 views
0

在CI的时候,会发生什么添加字符做这样​​的事情:与空终结串用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,但我想知道为什么上面的代码是行不通的。

+2

需要注意的是'C +'\ 0''只是'C'。它不会将* 2 *元素写入数组。 –

+1

'buf [0] ='\ 0';''将'buf'重置为空字符串('“”')。 – BLUEPIXY

+0

[示例代码](http://ideone.com/qe5ogw) – BLUEPIXY

回答

1

此:

buf[strlen(buf)] = c+'\0'; 

会导致这样的:

buf[strlen(buf)] = c; 

意味着没有另外会发生。

因此,会发生什么事是:

buf[0] = c; 

因为strlen(buf)为0


此:

buf[0] = '\0'; 

把一个空终止权的字符串的开始,覆盖c(您刚分配给buf[0])。因此它正在重设buf""

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'; 

的化合物作用是一个空操作。

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