【发布时间】:2018-10-03 20:03:43
【问题描述】:
我试图将字符串作为参数传递给函数,但它会引发分段错误(核心转储)错误。你能告诉我我在这里犯了什么错误吗?代码如下:
replaceChars(char str[], char sChar[], char rChar)
{
int i,j;
printf("rChar is %c", rChar);
printf("sChar is %s", sChar);
for(i = 0; i <= strlen(str); i++)
{
for(j = 0; j <= strlen(sChar); j++)
{
if(str[i] == sChar[j])
{
str[i] = rChar;
//printf("The New String is %c", str[i]);
}
}
}
printf("The New String is %s", str);
}
void main()
{
char myString[36], schar[36], rchar;
printf("Please enter a string:");
scanf("%[^\n]s", &myString);
printf("Which characters to replace?");
scanf(" %[^\n]c", &schar);
printf("With which character?");
scanf(" %[^\n]c", &rchar);
replaceChars(myString, schar, rchar);
}
【问题讨论】:
-
在你的循环中用
<替换<= -
请使用Tour 并阅读How to Ask。请edit您的帖子并修复您的代码缩进。如果minimal reproducible example 包含一个调用您正在调试的函数的
main函数,那就太好了。 -
另外,学习使用开发环境中可用的任何调试器。通过单步执行您自己的代码并观察您的局部变量,很容易检测到缓冲区溢出。
-
感谢@kerrytazi 的建议!但是,在我进行上述更改后,str 值将打印为 null。你能帮我解决这个问题吗?
-
scanf(" %[^\n]c", &rchar);不好