2017-08-12 98 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; 
}