C 프로그래밍에서 두 개의 문자열을 연결하려고합니다. 나는 그것이 출력으로 mv /home/xxxxxxx/.local/share/Trash
를 인쇄 s1
의 값을 인쇄하려고하면strncat()이 같은 문자열로 다시 복사 중입니다
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
/* code */
char s1[3],s2[34];
strncat(s1,"mv ",3);
strncat(s2," /home/xxxxxxx/.local/share/Trash/",34);
printf("%s \n",s1);
return 0;
}
: 여기 내 코드입니다. s2가 s1 문자열로 추가되는 이유는 무엇입니까? 질문이 이미 나오면 링크를하십시오.
'strncat() 사용은 정말 어렵습니다! 길이로 제공 한 번호는 무엇입니까? 's2'에서 사용할 수있는 총 길이가 아닙니다 (예제에서). 's2'의 현재 내용 뒤에 남겨진 길이입니다.'sizeof (s2) - strlen (s2) - 1' ('s1'과's2'도 null- 종료 된 문자열). 왜's1'에서 명령을,'s2'에서 인자를 원하는지는 분명하지 않습니다. 'snprintf (s2, sizeof (s2), "% s % s", "mv", "/ home/..."); –
'strncat (a, b, sizeof (a));'를 사용하지 마십시오. 'a'가 합법적 인 문자열을 가지고 있다고 확신하면,'strncat (a, b, sizeof (a) -1); a [sizeof (a) -1] = '\ 0';'. 이것은 너무 많은'char'가 연결되지 않았 음을 보장하고 배열은'\\ '종료됩니다. – chux