2014-12-06 2 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'' –

+0

그래서 내가 무엇을 할 sould? 그 호기심, 사촌 내가 printf ("% s \ n", lenServer); 배열 서버 []를 만들기 직전에 얻을 수있는 것을 얻습니다 : S –

+0

문자 배열 기억이 C와 다르면 유효한 문자열은 항상 널 문자로 종료됩니다. ""% s "'문자열을 출력하기 위해 사용합니다. 그것을 프린트하기 전에 아래의 대답과 같이''\ 0 ''을''server []'의 끝 문자로 사용해야합니다. –

답변

2

문자열 끝에 NUL ('\0')을 입력하십시오.

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

확인. 그것은 효과가 있었다. 나에게 설명 할 수있는 서버 [lenServer] = 0; 이? 그냥 해달라고. and thx : –

+0

@PedroViana 예 : "ola", lenServer : 3, char 서버 [lenServer + 1]; =>'char 서버 [4];'서버 [0]':'o','서버 [ server ','server ','server ','server ', :'\ 0', – BLUEPIXY

+1

@PedroViana주의 int 값은 '\ 0'이다. nul 심볼은'0 ' 'bluepixy의 답변'server [lenServer] = 0;'은'server [lenServer] = '\ 0'와 같은 효력을 가지며, 둘 다 동일합니다. –