1

这段代码有什么错误??!!

提示: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++;    
  }    
}
4

3 回答 3

7

字符串文字不可修改。以这种方式更改它:

int main(void)
{ 
  char str[] = "this is a test";
  sp_to_dash(str);

  return 0;    
}
于 2013-08-10T13:14:25.543 回答
3

于浩的回答非常好,而我有另一种方法来解决它:

void sp_to_dash( char *str)    
{    
  while(*str) {    
  if(*str==' ' ) *str = '-';    
  printf("%c", *str);    
  str++;    
  }    
}

==>

void sp_to_dash(const char *str)    
{    
  while(*str) {    
  if(*str !=' ' )     
      printf("%c", *str);
  else
      printf("-");    
  str++;    
  }    
}

它还打印正确的字符串,而无需修改字符串。

于 2013-08-10T13:53:27.443 回答
1

您正在将 a 传递const char*给您的函数,即"this is a test". 您的数组是一个字符串文字,当编译器看到时,它被放入可执行文件( rodata)的一个特殊只读部分。实际上,声明为const的其余变量也是如此。诀窍是只知道您的字符串是 aconst char*而不仅仅是 a char*

于 2013-08-10T13:25:18.873 回答