jak*_*ton 1 c segmentation-fault
我正在尝试反转字符串,我的程序将编译并执行它想要做的所有事情,但是,当我运行我正在运行的应用程序时Segmentation fault (core dumped),我理解错误的含义,但我不明白它的来源从:
#include <stdio.h>
#include <string.h>
char *reverse(char *str)
{
char tmp, *src, *dst;
size_t len;
if (str != NULL)
{
len = strlen(str);
if (len > 1)
{
src = str;
dst = src + len - 1;
while (src < dst)
{
tmp = *src;
*src++ = *dst;
*dst++ = tmp;
}
}
}
return str;
}
int main(int argc, char *argv[])
{
char *str[] = {"a", "ab", "abc", "test", "another test"};
int i;
char s[10000];
for (i=0; i < sizeof(str) / sizeof(str[0]); i++)
{
strcpy (s, str[i]);
printf("Original: %s", str[i]);
printf("Reversed: %s", reverse(s));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么我会出现分段错误,如何解决?
问题是你src和dst指针在同一个方向上移动,所以src从来没有"捕获" dst.最终指针超过允许的内存区域,导致未定义的行为,从而导致分段错误.
你需要递减dst而不是递增它:
while (src < dst)
{
tmp = *src;
*src++ = *dst;
*dst-- = tmp;
} // ^^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |