该代码中的错误是什么?

时间:2013-08-10 13:11:11

标签: c++ c string

此代码中的错误是什么?!!

提示:以下程序中的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++;    
  }    
}

3 个答案:

答案 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*