更改功能,以便用中间的情况替换字符串中的空格" - "

时间:2017-11-08 17:59:43

标签: c

我得到了这个程序而不是打印" - "在有空间的地方,改变功能,以便用#34; - "

取代空间。
#include<stdio.h>
void sp_to_dash(const char *s);
int main(){
sp_to_dash("this is a test");//using the function
return 0;
}//end of main
void sp_to_dash(const char *str){//start of the function
while(*str){//start of while

      if(*str==' ')printf("%c",'-');
      else printf("%c",*str);
      str++;
    }//end of while
}//end of function

我确实改变了它并且它以一种熟悉的方式起作用:

#include<stdio.h>
  void sp_to_dash(char *s);
  int main() {
      char str[] = "this is a test";
      sp_to_dash(str);
      printf("%s", str);
      getchar();
  return 0;
}//end of main
void sp_to_dash(char *str){
while (*str) {
    if (*str == ' ') *str= '-';
    str++;
    }//enf of while
}//end of sp_to_dash

现在我不明白的东西,在原始代码中(未更改)我发送给函数一个直接字符串然后它接受了它但是在第二个代码中(更改了一个) 我必须创建一个新的字符串让它接受:

char str[]="this is a test";

为什么我不能做类似的事情:

#include<stdio.h>
 void sp_to_dash(char *s);
  int main() {
    sp_to_dash("this is a string");
  return 0;
 }//end of main
 void sp_to_dash(char *str){
 while (*str) {
     if (*str == ' ') *str= '-';
    str++;
  }//enf of while
}//end of sp_to_dash

1 个答案:

答案 0 :(得分:0)

这是因为字符串文字被定义为const char *,这意味着您不能修改它的内容。我相信您遇到了一些编译错误,例如“无法将const char *转换为char *。在这种情况下,最好不要试图通过强制转换为(char *)来欺骗编译器,因为它会导致未定义的行为。

一旦您将字符串定义为char str[]="this is a test";,您实际上创建了一个char数组,并将其初始化为包含“这是一个测试”的字母(最后是\0

指向此数组中任何元素的指针类型为char *,因此编译成功传递。