문제점.
하나의 솔루션 :
char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);
이 C 문자열에 대한 포인터의 배열에 당신의 문자 배열을집니다.
또한, cmd[]
에 strcat (여기에있는 내용)을 추가하는 데 필요한 공간을 충분히 확보해야합니다. 일반적으로 snprintf
을 사용하여 문자열 연결을 수행하는 것이 가장 좋습니다. 대상 배열 의 전체 크기는 null을 종료하는을 포함하며 항상 null이 추가되므로 엉망이되는 것은 어렵습니다. 원래의 문자 배열을 가진 예 :
char cmd[50] = "some text here";
char buf[50];
char v[] = {'a','s','d','c','b'};
snprintf(buf, sizeof buf, "%s%c", cmd, v[3]);
참고 : buf
정말 여기에 같은 []
선언 배열이있는 경우에만이 작품 같은 SIZEOF. 또한 snprintf를 사용하면 대상 및 형식 인수로 동일한 버퍼를 사용하면 예기치 않은 결과가 발생할 수 있으므로 새로운 대상 버퍼 변수를 추가했습니다. cmd를의 현재 내용의 끝 추가 만 원래 두 배열과
한 예로 현재 snprintf 더,이 특별한 경우에, 그래서 명확하게
snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);
는 strncat(cmd, &v[3], 1)
1 개 문자를 추가 할 다른 답변에서 제안 훨씬 더 좋지만 snprintf의 이점은 문자가 아닌 printf가 지원하는 모든 데이터 유형을 추가 할 수 있다는 것입니다.
고맙습니다! cmd []에 여유 공간이 충분히 포함되어 있다고 생각하면 가장 빠른 방법이라고 생각합니까? – redgiun
아마도 strncat이 가장 빠르지 만 가장 빠른 것은'int len = strlen (cmd); cmd [len] = v [3]; cmd [len + 1] = 0;'. 배열 인덱싱이 0에서 시작하는 방법에 유의하십시오. 따라서 some_cstring [strlen (some_cstring)]은 항상 0입니다. – hyde
감사합니다. 유용했습니다 – redgiun