【发布时间】:2015-11-04 12:45:01
【问题描述】:
我正在尝试学习 C,在反转字符串时遇到此错误。我不精通内存分配的东西,请你指出我做错了什么。
#include<stdio.h>
#include<string.h>
char* strrev(char *str);
int main()
{
char str[1000];
char *str1;
printf("Please enter a String\n");
gets(str);
str1=strrev(str);
puts(str1);
}
char* strrev(char *str)
{
char *str1;
int i,length,c;
length=strlen(str);
for (i=length-1;i<=0;i--)
{
*(str1+c) = *(str+i);
c++;
}
*(str1+c) ='\0';
return str1;
}
【问题讨论】:
-
不鼓励使用
gets,因为此功能无法防止缓冲区溢出。 -
strrev中的循环永远不会针对长度超过一个字符的字符串运行。对于零长度字符串,您将有 undefined behavior. -
与您的错误无关,也许只需检查所有其他已经在 SO 上执行相同操作的帖子,例如 this one?
-
既然你刚刚开始学习c,现在是学习如何使用GDB的好时机。它是一个调试器,可让您单步执行代码。它可以帮助您了解代码的来龙去脉。它很简单,并且使调试错误变得轻而易举。这是一个简单的启动器:cs.umd.edu/~srhuang/teaching/cmsc212/gdb-tutorial-handout.pdf
-
你也没有初始化 c,它可能是任何东西。所以你正在写入内存中的一个随机位置。
标签: c string algorithm pointers segmentation-fault