저는 C에서 완전한 멍청한 놈입니다. 코드의 특정 부분이 올바르게 컴파일되는 이유를 이해하는 데 도움이 필요합니다. 왜 컴파일 오류입니까?
main(){
char name[3];
strcpy(name, "12345678912312");
printf("%s\n",name);
}
그래서이 코드는 제대로 컴파일, 그것은 세그먼트 오류가 발생하지 않는 이유 그러나 내가 이해가 안 돼요. 내 이해 c에서 각 문자는 1 바이트입니다. 배열 이름은 3 바이트를 유지할 수 있다고 가정합니다. 대신에 그 이상을 저장할 수 있습니다. 왜 그런가요?
또한이 문자를 하나 더 추가하면 불법 명령어 (코어 덤프)가 발생합니다.
main(){
char name[3];
strcpy(name, "123456789123121");
printf("%s\n",name);
}
그런 다음 코드에 다른 문자를 추가하면 세그먼트 오류 (코어 덤프) 오류가 발생합니다. 왜 오류가 다른가요? 그리고 왜 그들은 전에 일어나지 않았습니까?
마지막으로 각 기능에 대한 문서는 어디에서 찾을 수 있습니까? 내가 자바 문서를 참조하는 데 사용되는 자바에서 오는거야.
우분투 리눅스에서 GCC 컴파일러를 사용하고 있습니다.
그런 경우에는 name 변수에 메모리를 할당해야합니까? 이것이 해결책이라면 어떻게 구현할 것인가? –
당신은'name'이 당신이 붙여 넣기하고있는 문자열의 크기보다 더 큰 크기 (null로 끝나는 문자열 문자에 대해 하나의 여분의 문자가 필요함)를 가지고 있는지 확인해야합니다. – vsoftco
당신의 특별한 문제는'const char * name = "123456789123121"'을 사용하십시오. 일반적인 동적 메모리 할당을 위해서는'malloc'을 찾아보십시오. – IllusiveBrian