トレーニング中のハッカーとして、文字列を取り、新しい文字列のメモリを割り当て、新しい文字列へのポインタを返す独自のstring_reverse関数を作成することにしましたが、これがセグメンテーション違反を返すので、私が望むものが得られません。リターンでこのデバッグエラーの解釈方法
#include <stdio.h>
#include <stdlib.h>
char* string_reverse(char* string);
char* string_reverse(char* string) {
int len = 0;
for (int i = 0; *(string + i) != '\0'; ++i)
len++;
char* result = (char*)malloc(len * sizeof(char));
if (result == NULL){
puts("Pointer failure");
exit(EXIT_FAILURE);
}
for (int i = 0; *(string + i) != '\0'; ++i)
*(result + (len - i)) = *(string + i);
return *result;
}
int main() {
char* str= "Ni Hao!";
char* result = string_reverse(str);
printf("%s\n", result);
free(result);
return 0;
}
、私はこのデバッグメッセージが表示されます。
Starting program: /home/tmo/string_reverse
Program received signal SIGSEGV, Segmentation fault.
0xb7e5b3b3 in strlen() from /lib/i686/cmov/libc.so.6
どのように私はこの結果を解釈すべきか?
コンパイラが警告していることに注意してください。そして、それがあなたに何かを与えていない場合は、より良いコンパイラを入手してください。 GCCは言う: x.c:関数 'string_reverse ': x.c:21:警告:キャストのない整数からポインタを返す –