编辑:为了澄清这是一个关于我在gdb中遇到的错误的问题,如果它是正常的行为,不是关于天气局部变量可以在其范围之外访问。
最近,我一直在做一些C练习。我会像这样编译我的程序 -
gcc -g -o ../bin/prog prog.c
他们会像这样调试 -
gdb ../bin/prog
(gdb) run < ../bin/input
然而,每次我这样做时,如果不是同样的错误,我会遇到 -
Starting program: /home/user/workspace/c exercises/prog/bin/prog < ../bin/input
Program received signal SIGSEGV, Segmentation fault.
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:94
94 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory
以下是此特定事件的相应来源,我正在运行Debian 9 i386。我不认为它与我的程序有关,因为我对程序有效时会遇到同样的错误。它始终无法找到一些.so或.S文件。提前谢谢。
/** Exercise 1-19
*
* Write a function reverse(s) that reverses the character string s.
* Use it to write a program that reverses its input a line at a time.
*/
#include <stdio.h>
#define MAX 1000
int getLine(char*,int);
char* reverse(char*);
int main()
{
char line[MAX];
while(getLine(line, MAX) > 0)
puts(reverse(line));
}
int getLine(char s[], int lim)
{
int c,i;
for(i=0;(c=getchar())!=EOF && c!='\n';i++)
s[i] = c;
if(c == '\n')
s[i++] == '\n';
s[i] = '\0';
return i;
}
char* reverse(char s[])
{
char rev[MAX];
int i;
for(i=MAX-1; s[i]!='\0' && i >= 0; i--);
for(int j=1; j<=i; j++)
rev[j] = s[i-j];
rev[i] = '\0';
return rev;
}