那个代码中的错误是什么

what is the error in that code?

本文关键字:错误 是什么 代码      更新时间:2023-10-16

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

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

字符串文字不可修改。这样改:

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

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

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++;    
  }    
}

它还打印正确的字符串,而不必修改字符串。

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