malloc와 *systime 과의 관계?

newinside의 이미지

#include <stdio.h>
#include "time.h"

char *subString(const char *s,int start, int length);

int main(int argc, char *argv[])
{
char *abc="123456789";

/* struct tm *systime; */
/* time_t t; */
/* t = time(NULL); */
/* systime = localtime(&t); */
/* printf("Year : %.2d\n", systime->tm_year+1900); */

printf("%s\n",subString(abc,1,3));
}

char *subString(const char *s,int start, int length)
{
char *result;
int i;

start--;

result=malloc(sizeof(char)*length);

for(i=0;i<length;i++)
{
result[i]=s[i+start];
}

return result;
}
이것을 실행하면 123이 잘 나옵니다.

그런데 주석 처리 한 부분을 지우고 나면 result 변수에 쓰레기 값이 들어가 있는데 그 이유를 모르겠습니다.

고수님들 도와주세요.

doldori의 이미지

주석 처리한 부분하고는 관계가 없고 null 문자를 넣지 않아서 그렇습니다.

char *subString(const char *s,int start, int length) 
{ 
    char *result
    // null 문자를 위해 1바이트를 더 할당
    if ((result = malloc(length + 1)) == NULL)
        return NULL;
    memcpy(result, s + start, length);
    result[length] = '\0';
    return result; 
}