2012-10-31 5 views
3

나는 strcpy()strcat()에 대한 설명서를보고있었습니다. 함수 호출의 "성공"을 평가할 방법이 없다고 보입니다. (즉, 반환 값은 결코 NULL이 될 것입니다), 맞습니까?어쨌든 str 함수의 성공 여부를 확인할 수 있습니까?

출력이 유효 할 수있는 이러한 함수의 입력에 대한 규칙을 따르는 경우에 한합니다. 그냥 여기에 아무것도 놓치지 않았는지 확인하고 싶었습니다 ...

답변

5

이 함수는 잘 정의 된 방법으로 실패 할 수 없습니다. 그것들은 성공하거나, 끔찍한 잘못 (예 : 0 개의 문자 또는 너무 작은 출력 버퍼 누락)이 생겨서 아무 일도 일어나지 않습니다.

1

"나는"실제로 "성공"이 무엇인지 알 수있는 방법이 없다고 생각하기 때문에. 예를 들어, strcpy는 실제로 memcpy입니다. 따라서 C에 관한 한, 한 메모리 위치에서 데이터를 가져 와서 다른 메모리 위치로 복사하는 것입니다. 데이터가 어떻게 보이게되는지, 또는 사용자가 예상하는 방식으로 형식화되는지는 알 수 없습니다. 나는 당신이 성공했는지 아닌지를 아는 유일한 방법은 당신이 세그 폴트를 갖게되는지 아닌지를 추측합니다.

1

정의되지 않은 동작을 호출하지 않는다면 이러한 함수가 작동합니다. 특히, 작성중인 메모리를 할당해야합니다. 프로그램을 중단하는 것 외에는 실패 할 수있는 방법이 없습니다.

일반적으로 얼마나 많은 바이트가 쓰여지는지 알기 어려울 수 있으므로 이러한 기능의 사용은 권장하지 않습니다. 가능한 경우 strncpystrncat을 사용하십시오.