어떻게 예를두 개의 문자열을 여러 개의 null 문자로 연결하는 방법은 무엇입니까?
많은 널 (null) 문자가char s[5]={'s','a','\0','c','h'};
char m[11]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
두 문자열을 연결합니다. 나는 strcat()
을 시도했다. 작동하지 않습니다. 어떤 방법이 있습니까?
어떻게 예를두 개의 문자열을 여러 개의 null 문자로 연결하는 방법은 무엇입니까?
많은 널 (null) 문자가char s[5]={'s','a','\0','c','h'};
char m[11]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
두 문자열을 연결합니다. 나는 strcat()
을 시도했다. 작동하지 않습니다. 어떤 방법이 있습니까?
정의상 C- 문자열은 null로 끝나기 때문에 까다 롭습니다. 그래서 실제로 가지고있는 것은 2 개의 문자열이 아니라 함께 쓰려는 2 개의 바이트 버퍼입니다. (이유는 여기에 strcat
같은 기능이 여기에서 작동하지 않는 이유입니다 - 그들은 인수가 C- 문자열이라고 기대합니다.)
버퍼가 어디서 끝나는지를 알려주기 위해 널 문자를 사용할 수 없으므로 당신은 C-strings로 할 수 있습니다, 당신은 미리 버퍼의 크기를 알아야합니다.
이char dest[16];
memcpy(dest, s, 5); // Copy s to the final buffer
memcpy(dest + 5, m, 11); // Copy m to the final buffer just after s
모든 C 표준 라이브러리 문자열 함수는 첫 번째 \0
에서 중지됩니다. 그건 의도적으로입니다. 실제로 입력 배열 은 \0
으로 끝나지 않으므로은 잘 작동하지 않습니다.
그래서 가장 쉬운 방법은 memcpy
을 대신 사용하고 자신을 복사 할 문자 수를 지정하는 것입니다. 필요한만큼의 메모리를 대상 버퍼에 할당하는 것을 잊지 마십시오.
첫 번째 NUL 바이트에서 멈추지 않으면 문자열 기능이 없습니다. 이것은 디자인의 문제가 아니지만 C로 된 문자열의 관례/정의입니다. – Olaf
더 간단한 방법 : 그럼 비트 블리트 하나의 버퍼에 두를만큼 간단 이상적으로
const int size_s = 5;
const int size_m = 11;
char s[size_s]={'s','a','\0','c','h'};
char m[size_m]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
char destination[size_s+size_m];
int i;
for (i = 0;i < size_s;i++)
destination[i] = s[i];
for (i = 0;i < size_m;i++)
destination[i+size_s] = m[i];
, 당신은 사용해야 방어 적이기
const int size_s = 5;
const int size_m = 11;
char s[size_s]={'s','a','\0','c','h'};
char m[size_m]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
char destination[size_s+size_m];
memcpy(destination,s,size_s);
memcpy(destination,m,size_m);
대상 + 크기 _을 적용 했습니까? – Bathsheba
char s[5]={'s','a','\0','c','h'};
char m[11]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
char* e = (char*)malloc(sizeof(s) + sizeof(m));
memcpy(e, s, sizeof(s));
memcpy(&e[sizeof(s)], m, sizeof(m));
완료되면 결과 문자열을 삭제하는 것을 잊지 마십시오.
free(e);
기술적으로 null은 문자열을 끝냅니다. 포인터 연산과'memcpy() '를 사용한다. –
널 종료 문자열은 널 문자 하나만 포함한다. 이것은 분명히 문자열의 마지막 문자이다. –
배열 끝에 "\ 0"이 없습니다 : 예 :'{ 's', 'a', '\ 0', 'c', 'h'}; s ','a ','\ 0 ','c ','h ','\ 0 '}; 그것 없이는 마지막 문자열이 끝나는 곳을 결정할 수 없습니다. 사실 두 개의''\ 0 ''이 필요하기 때문에 더 많은 문자열이 있음을 알 수 있습니다. –