我正在练习C语言,只是构建了一个简单的程序,可以反转一个单词中的字母序列。
#include <stdio.h>
int main(void)
{
char str[50];
printf("Enter a word: ");
scanf("%s", str);
int i, len=0;
char temp;
while(str[len]!='\0')
{
len++;
}
/*
for(i=0; i<len/2; i++)
{
temp=str[i];
str[i]=str[(len-i)-1];
str[(len-i)-1]=temp;
}
*/
while(i!=len-1)
{
temp=str[i];
str[i]=str[len-1];
str[len-1]=temp;
i++;
len--;
}
printf("%s\n", str);
return 0;
}
我有两个版本,一个工作得很好但另一个制作&#34;分段错误:11&#34;我想我可能已经访问了错误的记忆位置,但弄清楚我做错了什么是非常棘手的。
答案 0 :(得分:6)
您需要将i
初始化为0
:
int i = 0;
这样你就可以从字符串的开头开始了。现在,i
有一个未定义的值,并从字符串的边界中访问内存。
您还需要改变您的状况:
while (i != len-1)
到:
while (i <= len-1)
以便在到达字符串末尾时停止。