无法解释的分段错误
An unexplained segmentation fault
我正在编写代码来反转我输入的每一行中的字符数组。但是,我在调试程序的时候遇到了segmentation fault,不知道是什么原因。
这是我的代码:
#include <stdio.h>
#define DEFAULT 1000
int reverse(char s[]);
main()
{
int i;
char line[DEFAULT] = {'[=10=]'};
while ((i = getline(line, DEFAULT)) != 0) {
printf("%s", reverse(line));
}
return 0;
}
/*reverse a line*/
int reverse(char s[])
{
int i = 0, j = 0;
while (s[i] != '\n')
++i;
for (j = 0; j < i; ++j) {
s[2 * i - j] = s[j];
}
for (j = 0; j < i; ++j) {
s[j] = s[j + i + 1];
s[j + i + 1] = '[=10=]';
}
return i;
}
/*get a line from input stream*/
int getline(char s[], int lim)
{
int i, c, j = 0;
for (i = 0; ((c = getchar()) != EOF) && (c != '\n'); ++i) {
if (i < lim - 2) {
s[j] = c; // use j to prevent index out of bounds
++j;
}
}
if (c == '\n') {
s[j] = c;
++j;
}
s[j] = '[=10=]';
return i; // return the length of char s[]
}
当我输入“abc\n”并执行reverse(s)时,s中的内容变成了“cba\n”,我指的是3,一切正常。当我退出该函数时发生分段错误。
以下是更多详细信息:
Complier: GCC 4.9.2 64-bit Release
System: Windows 10
你的函数 int reverse(char s[])
是 returning 一个 int
,然后你试图将结果 int
打印为字符串:
printf("%s", reverse(line));
如果你想像那样使用函数,你可以将其签名更改为 return a char*
:
char* reverse(char s[]);
然后 return 您作为参数提供的 s
。您的编译器应该发出有关向 printf
提供错误类型参数的警告。如果不是,请尝试将其设置为更严格的警告。
我正在编写代码来反转我输入的每一行中的字符数组。但是,我在调试程序的时候遇到了segmentation fault,不知道是什么原因。 这是我的代码:
#include <stdio.h>
#define DEFAULT 1000
int reverse(char s[]);
main()
{
int i;
char line[DEFAULT] = {'[=10=]'};
while ((i = getline(line, DEFAULT)) != 0) {
printf("%s", reverse(line));
}
return 0;
}
/*reverse a line*/
int reverse(char s[])
{
int i = 0, j = 0;
while (s[i] != '\n')
++i;
for (j = 0; j < i; ++j) {
s[2 * i - j] = s[j];
}
for (j = 0; j < i; ++j) {
s[j] = s[j + i + 1];
s[j + i + 1] = '[=10=]';
}
return i;
}
/*get a line from input stream*/
int getline(char s[], int lim)
{
int i, c, j = 0;
for (i = 0; ((c = getchar()) != EOF) && (c != '\n'); ++i) {
if (i < lim - 2) {
s[j] = c; // use j to prevent index out of bounds
++j;
}
}
if (c == '\n') {
s[j] = c;
++j;
}
s[j] = '[=10=]';
return i; // return the length of char s[]
}
当我输入“abc\n”并执行reverse(s)时,s中的内容变成了“cba\n”,我指的是3,一切正常。当我退出该函数时发生分段错误。
以下是更多详细信息:
Complier: GCC 4.9.2 64-bit Release
System: Windows 10
你的函数 int reverse(char s[])
是 returning 一个 int
,然后你试图将结果 int
打印为字符串:
printf("%s", reverse(line));
如果你想像那样使用函数,你可以将其签名更改为 return a char*
:
char* reverse(char s[]);
然后 return 您作为参数提供的 s
。您的编译器应该发出有关向 printf
提供错误类型参数的警告。如果不是,请尝试将其设置为更严格的警告。