2014-12-06 110 views
0

有人可以解釋我,爲什麼我在輸出中得到這些奇怪的字符?終端上的奇怪字符

我得到這個代碼:

#include <stdio.h> 
#include <string.h> 

int main(int argc, char* argv[]){ 
    if(argc!=2){ 
     printf("Incorrect number of arguments\n"); 
     return -1; 
    } 
    int lenServer=0; 
    int i=0; 
    while(argv[1][i]!=':'){ 
     lenServer++; 
     i++; 
    } 

    char server[lenServer]; 
    memcpy(server,argv[1],lenServer); 

    printf("%s\n",server); 
    return 1; 

} 

我得到這個終端上:

[email protected]:~/Desktop/SDMEU$ gcc table_client.c -o table-client 
[email protected]:~/Desktop/SDMEU$ ./table-client ola:eu 
ola N 
[email protected]:~/Desktop/SDMEU$ 

不應該我只是得到ola

+3

'server'不是' '\ 0''終止,並宣佈它爲'字符服務器[lenServer + 1];'+1'' \ 0'' – 2014-12-06 11:54:01

+0

那麼要高度重視怎麼辦?它好奇,因爲如果我把一個printf(「%s \ n」,lenServer);在創建數組服務器[]之前,我得到了它想要得到的結果:S – 2014-12-06 11:57:18

+0

記住char數組不同於那麼C中的字符串,一個有效的字符串總是nul終止字符數組,''%s「'用來打印字符串在打印之前,你必須在''\ 0''中作爲'server []'中的結束字符,如下面的答案。 – 2014-12-06 12:19:06

回答

2

將一個NUL('\0')放到字符串的末尾。

char server[lenServer+1]; 
memcpy(server,argv[1],lenServer); 
server[lenServer]=0; 
+1

好的。有效。你能解釋我的服務器[lenServer] = 0;這個?只是不明白。和thx :) – 2014-12-06 12:00:58

+0

@PedroViana例如:「ola」,lenServer:3,'char server [lenServer + 1];'=>'char server [4];''server [0]':'o','server [ 1]':'l','server [2]':'a','server [3]':'\ 0', – BLUEPIXY 2014-12-06 12:04:00

+1

@PedroViana注意int'等同於''0'的符號是'0 '所以在bluepixy的回答中'server [lenServer] = 0;'和'server [lenServer] ='\ 0'效果相同;'兩者都是一樣的。 – 2014-12-06 12:15:41