"두 문자열 문자열에 대한 포인터를 반환합니다. 첫 번째 문자열은 짝수 인덱스 인 문자열 이고 두 번째 문자열은잘못된 C 실습이 잘못되었습니다 : 두 문자열 배열에 대한 포인터를 반환하려고 시도합니다
char **parity_strings(const char *s) {
char** parity = malloc(sizeof(char*) * 2);
char even_strings[] = "";
char odd_strings[] = "";
int x = 0;
int y = 0;
for (int i = 0; i < strlen(s); i++) {
if ((i % 2) == 0) {
even_strings[x] = s[i];
x++;
}
else {
odd_strings[y] = s[i];
y++;
}
}
parity[0] = even_strings;
parity[1] = odd_strings;
return parity;
}
int main(int argc, char **argv) {
char **r = parity_strings(argv[1]);
printf("%s %s %s", r[0], r[1], argv[1]);
return 0;
}
내 논리가 말이되지만 출력은 항상 잘못 홀수 지수 "에 있습니다 s의 문자. 예를 들어, 입력 ababab
으로 돌아가면 ababab
이 반환되고 예상 출력은 aaa bbb ababab
입니다. 나는 무엇을 잘못 했는가?
'char even_strings [] = ""; '길이는 1 - 종결 자입니다. 그래서 indexing'even_strings [x] = s [i];는 UB이므로 수명이 다한 로컬 문자열에 대한 포인터를 반환합니다. –
C가 문자열을 다시 처리하는 방법을 검토하는 것이 좋습니다. 이것들은 하이 레벨 오브젝트가 아니고 대신에 ASCII 코드로 채워진'char' 배열과 끝 부분에'nul' 제로입니다. 적분 치로서 사용할 수있는 것이 아닙니다. (비록 문자열에 포인터, 당신은 할 수) – infixed