2013-09-27 2 views
-3
#include "stdafx.h" 
#include<string.h> 
#include<stdio.h> 


int _tmain(int argc, _TCHAR* argv[]) 
{ 

    char abc[28] ; 
    //abc[26] = '\0'; 
    abc[0]=65; 
    char hj = abc[0]; 
    for(int i=0; i<26; i++) 
    { 
    abc[i]=++hj; 

    printf("%d\n",i); 

    } 
    int l=strlen(abc); 
    abc[l]='\0'; 
    printf("length of abc_array is %d\n",(strlen(abc))); 
    for(int i=0; i<strlen(abc); i++) 
    { 
    printf("%c",abc[i]); 
    printf("\n"); 
    } 

} 

문자열의 출력 길이가 39이며 잘못되었습니다. 오류가 무엇입니까?strlen()이 올바른 값을 제공하지 않습니까?

+3

'strlen'에는 null이 필요합니다. null을 넣을 위치를 결정하는 데 사용할 수 없습니다. – chris

+1

이것은 C++과 어떤 관련이 있습니까? 이것은 분명히 C 문제입니다. –

+0

주석 처리 된 부분'// abc [26] = '\ 0';은 정확했으나 주석 처리를하지 않았습니다 – P0W

답변

1

strlen에 전화하기 전에 abc[i] = '\0'을 설정해야합니다.

0

표준 strlen 기능은 문자열에만 적용됩니다. 문자열은 0 문자로 끝나는 문자 시퀀스입니다. 문자열이 아닌 문자열을 strlen에 전달하면 정의되지 않은 동작이 발생합니다.

코드에서 strlen에 전달할 내용은 문자열이 아닙니다. 이것이 strlen에서 의미없는 결과를 얻는 이유입니다.