(말씀으로 문자열 단어를 반전) -strcpy (char *, char a [])가 잘못된 결과를 제공합니다. 내가 달성하기 위해 노력하고있어
입력을 (. 문자열 리터럴은 가정) This is a string
출력 : string a is This
내 순진 솔루션을 :
복사 t 그는 문자 배열에 문자열 리터럴을 씁니다. [sizeofstring] STR 숯 배열
현재 내용 :This is a string
- 는 단어 배열 워드 리버스 다른 배열에 저장
.
char reverse [sizeofstring] :sihT si a gnirts
마지막 위치에서 0 번째 위치로 역순 배열입니다. char 어레이 솔루션에 보관하십시오.
char 솔루션 [sizeofstring] :string a is This
strcpy(pointertoachar, solution)
. - 함수는 char에 대한 포인터를 리턴해야하기 때문에.
코드 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *reverse(char *input) {
int n = strlen(input);
char str[n];
char reverse[n];
char solution[n];
char *solutionp = malloc(sizeof(char) * n);
strcpy(str, input);
int last = 0;
int i = 0;
int q = 0;
while (str[i] != '\0') {
if (str[i] == ' ') {
printf("i : %d\n", i);
printf("LAST:%d\n", last);
for (int t = (i - 1); t >= last; t--) {
reverse[q] = str[t];
q++;
}
last = i + 1;
reverse[q] = ' ';
q++;
}
i++;
}
// for the last word.
for (int cc = i - 1; cc >= last; cc--) {
reverse[q] = str[cc];
q++;
}
// Traversing from the last index to the first.
int ii;
int bb = 0;
for (ii = n - 1; ii >= 0; ii--) {
solution[bb] = reverse[ii];
bb++;
}
// This prints the right output.
// printf("%s\n",solution);
// Copying from a char array to pointer pointing to a char array.
strcpy(solutionp, solution);
return solutionp;
}
int main() {
char *str = "This is a string";
char *answer;
answer = reverse(str);
printf("%s\n", answer);
printf("\n");
return 0;
}
문제 : 의도 한대로
1 단계에서 3 단계로 노력하고 있습니다. 디버깅 목적을 위해 솔루션을 포함하는 배열의 출력을 인쇄 해 보았습니다. 그러나 작동했습니다. 그러나 strcpy
을 사용하는 포인터로 가리키는 char 배열에 복사하고 포인터를 반환하면 부분적으로 오른쪽 출력과 함께 가비지 값이 인쇄됩니다.
OUTPUT :
캐릭터 A가이 Z이다 ?? ??
4 단계에서 문제가있는 것 같습니다. 내가 잘못 했나요?
'int n = strlen (입력); char str [n]; [...] strcpy (str, input);'경계를 벗어난 쓰기, 정의되지 않은 동작. – EOF
문자열에는 NUL 종료 문자를위한 공간이 있어야한다는 것을 기억하십시오. str 변수의 길이는 1 바이트입니다. –
@BjornA. 나는 str [n], reverse [n], solution [n]을 [n + 1]로 바꾸려고 시도했다. 여전히 같은 결과를 출력합니다. –