char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
두 번째 strcpy
은 오류가없는 반면 첫 번째 strcpy
은 세그멘테이션 오류가 있습니다. 원래 목적을 달성하기 위해 어떻게 수정해야합니까?strcpy를 사용하는 C의 세그먼트 오류 오류
char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
두 번째 strcpy
은 오류가없는 반면 첫 번째 strcpy
은 세그멘테이션 오류가 있습니다. 원래 목적을 달성하기 위해 어떻게 수정해야합니까?strcpy를 사용하는 C의 세그먼트 오류 오류
당신이하고있는 일은 정의되지 않은 행동입니다.
char * strcpy (char * destination, const char * source)
strcpy 수정할 수있는 대상이 있어야합니다. 쓰기 위해 메모리를 할당하지 않았으므로이 문제를 일으키는 char **
을 전달 중입니다. 당신은 메모리가 strdup()
을 시도 할당 건너 뛰려면
char* key = malloc(sizeof(char)*7); // 7 because it can Hold World with a Nul character
strcpy(key, "Hello");
strcpy((key+1), "World");
printf("%s", key);
조금 더 설명 해주시겠습니까? –
'sizeof (char)'는 이렇게 사용할 때 항상 중복됩니다. C 표준 *에 의해 1로 정의됩니다. – hyde
당신은, 당신이 strcpy()
전에 메모리를 할당해야합니다
이것은 (아마도) 당신이하려고했던 것입니다. 첫 번째 strcpy를이 세그먼트 오류를 가지고있는 동안
당신이 정말로,char *key
두 번째 strcpy를이 오류가없는
char* key = malloc(sizeof(char) * 100); //allocate to store 100 chars
strcpy(key, "Hello");
strcpy(key + strlen(key), "World");
//or strcat(key, "World");
로하고,
char **key
을 원하지 확인, 단순화하기 위해
을 수행하는 방법 세분화 오류로 인해 실행되지 않은 경우 두 번째 오류가 발생하지 않는다는 것을 알고 계십니까?
key
에 할당 된 메모리가 없습니다. 첫 번째 strcpy
앞에 malloc
을 사용하여 메모리를 할당 할 수 있습니다.
*key = malloc(32 * sizeof(char)); // pick a size of buffer
두 번째 호출이 segfault를 일으킬 것으로 생각됩니다. 할당되지 않은 공간에 쓰려고합니다.
@DennisMeng 좋은 점은 코드를 잘못 읽었습니다. – Steve
키에 버퍼를 할당하고 있는지 여부는 코드에서 분명하지 않습니다. 나는 그것이 당신이 SEG 잘못을 얻는 이유라고 생각합니다.
어. 이 코드가 전부입니까? 키를 초기화하도록 초기화하지 않았습니다. 그래서 그것은 strcpy로 전달하기 위해 char *로 역 참조하는 초기화되지 않은 포인터입니다. – kfsone