此代码中的错误是什么?!!
提示:以下程序中的sp_to_dash()
函数在其字符串参数中为每个空格打印一个破折号。也就是说,字符串"this is a test"
将打印为"this-is-a-test"
。
#include <stdio.h>
void sp_to_dash( char *str);
int main(void)
{
sp_to_dash("this is a test");
return 0;
}
void sp_to_dash( char *str)
{
while(*str) {
if(*str==' ' ) *str = '-';
printf("%c", *str);
str++;
}
}
答案 0 :(得分:7)
字符串文字不可修改。改变方式:
int main(void)
{
char str[] = "this is a test";
sp_to_dash(str);
return 0;
}
答案 1 :(得分:3)
余浩的回答非常好,而我还有另一种方法可以修复它:
void sp_to_dash( char *str)
{
while(*str) {
if(*str==' ' ) *str = '-';
printf("%c", *str);
str++;
}
}
==&GT;
void sp_to_dash(const char *str)
{
while(*str) {
if(*str !=' ' )
printf("%c", *str);
else
printf("-");
str++;
}
}
它还会打印正确的字符串,而不需要修改字符串。
答案 2 :(得分:1)
您将const char*
传递给您的函数,即"this is a test"
。您的数组是字符串文字,当编译器看到时,它被放入可执行文件的特殊只读部分( rodata )。事实上,其余变量声明为 const 。诀窍就是知道你的字符串是const char*
,而不仅仅是char*
。