나는 C 프로그래밍과 개발 우분투에서 새로운입니다.숯의 Nulltermination *
나는 몇 가지 예제 코드가 있습니다
char * output1 ="one\0two\0";
char * output2 = "";
char * first = "one";
char * second = "two";
char * term = "\0";
output2 = malloc(20);
strcat(output2,first);
strcat(output2,term);
strcat(output2,second);
strcat(output2,term);
printf("%s\n",output2);
printf("%s\n",output1);
을 그리고 출력은 다음과 같다 : 그것의 \0
onetwo
one
output1
정지의 출력이 있기 때문에. 하지만 \0
을 추가 한 후에 output2
이 인쇄를 멈추지 않는 이유는 무엇입니까? 방법
와 나는 그 출력 인쇄를 사전에
one
감사를 만들기 위해 \0
output2
에 추가 할 수 있습니다.
정의되지 않은 행동을해야 하나! – haccks
@haccks UB가 보이지 않습니다. 지적하십시오. 참고 :'output2 = malloc (20);'지금 보았습니다! 'output2 = malloc (20); strcat (output2, first);'U2는'output2'가 certianly '\ 0'종료되지 않고'output2'가 종료 될 것으로 기대하는'strcat (output2, first);가 뒤 따른다. – chux
'strcat'는 간단하게 잘 정의 된 동작을 가지고 있으며, 매뉴얼 페이지에 자세히 설명되어 있습니다. 주의 깊게 읽은 다음 코드에 적용하면 여기에서 무슨 일이 일어나는지 즉시 알려야합니다. –