2014-05-18 4 views
-2
--start of snip-- 
char name[15]; 
... 

printf("Enter employee name \n"); 
scanf("%s",name); 

printf("strlen %d \n", strlen(name)); 
--end of snip -- 

Output: 
Enter employee name 
Veronica 
8 

끝까지 null 문자를 추가하지 않는 이유는 무엇입니까? 나는 아무것도 없어?왜 scanf 할 때 Null 문자가 문자열 끝에 추가되지 않습니까?

누군가 설명해주십시오.

편집 :

fgets을 사용하여 열 파일에서 읽기 라인이고 줄에서 토큰을 얻을 수 strtok(line,"\t ") 을 사용했다.

--snip-- 
char * chk; 
char line[100]; 
char temp_name[15]; 
while(fgets(line, sizeof line, filep)) 
{ 
     chk = strtok(line, " \t"); 
     while(chk !-= NULL) 
     { 
      strcpy(temp_name, chk); 
      chk = strtok(NULL, " \t"); 
     } 
} 
--snip -- 

문제 :

내가 추측하고 여분의 문자 인해 strtok를 delimitter 사용의 부적절한 취급에 temp_name (단지 이름)의 끝에 추가지고 있습니다.

솔루션 : NULL 또는 추가 문자가 strtok를 작업에 추가하기에 문제가 있는지 여부를

sscanf(line, "%s", temp_name); //easy fix 

가 어쨌든 내가 혼란스러워했다

if(!strncmp(temp_name, name, strlen(name))) // this is one fix 

다른 현명한 이용.

답변 해 주셔서 감사합니다.

또한, 하나는 공백, 탭을 피하기 위해 무엇을 구분 내가 strtok를에 사용해야 도움을 좋아하면 것인지 등

+1

거기에 있습니다. 'strlen'은 그것을 세지 않습니다. –

+0

check http://stackoverflow.com/questions/4132849/strlen-in-c-and-c-how-does-it-work –

+0

거기에 없으면 strlen은 – Dave

답변

3

널 (null) 종료 문자가 추가되지만, strlen 함수를 반환하지 않고 문자열의 길이는 NUL 터미네이터. man 3 strlen 가입일

2

:

strlen 함수() 함수 은 널 종료 바이트 ('\ 0') 을 제외한 문자열의 길이를 계산한다.

0

거기에 Null이 scanf의 끝에 배열에 추가됩니다. strlen 함수는 NULL까지 문자 수를 제공합니다. 문자열 길이 계산 중에 NULL을 계산하지 않습니다.