C で string_reverse の簡単な実装をいくつか実行しようとしています。ただし、gdb でデバッグすると、次のエラーが発生します。
Program received signal SIGSEGV, Segmentation fault.
0x00000000004005ca in string_reverse1 (string=0x68 <Address 0x68 out of bounds>)
28 length = strlen(*string);
Missing separate debuginfos, use: debuginfo-install glibc-2.15-58.fc17.x86_64
これが私が得ているエラーの私のコードです(エラーが発生した行にコメントしました):
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *char1 = "hello";
char *char2 = "hi";
char *char3 = "this is a really long string!";
string_reverse1(*char1);
string_reverse1(*char2);
string_reverse1(*char3);
printf("%s, %s, %s\n", char1, char2, char3);
return 0;
}
//Assuming method's purpose is to reverse the passed string
//and set the original string equal to the reversed one
void string_reverse1(char *string)
{
//Calculate length once so it isn't recalculated at
//every iteration of the for loop
int length;
char *reversed;
int i;
int reversed_counter;
length = strlen(*string); //ERROR
reversed_counter = 0;
for(i = length - 1; i >= 0; i--) {
reversed[reversed_counter] = string[i];
reversed_counter++;
}
//Can't forget to add the terminating null character!
reversed[length] = '\0';
string = reversed;
}
strlen は、ヌル バイトである \0 に到達するまで文字列を進めて、渡された文字列の長さを返すことを知っています。それで、渡された文字列が何らかの形で null で終わっていないのではないかと思いますか? ただし、メインで文字列を誤って宣言したとは思いません。
洞察をありがとう。