Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 代码中的错误是什么?_C++_C_String - Fatal编程技术网

C++ 代码中的错误是什么?

C++ 代码中的错误是什么?,c++,c,string,C++,C,String,这段代码中有什么错误 提示:以下程序中的sp_to_dash函数为其字符串参数中的每个空格打印一个破折号。也就是说,字符串thisatest将作为this-is-a-test打印 字符串文字不可修改。更改为: int main(void) { char str[] = "this is a test"; sp_to_dash(str); return 0; } 字符串文字不可修改。更改为: int main(void) { char str[] = "this i

这段代码中有什么错误

提示:以下程序中的sp_to_dash函数为其字符串参数中的每个空格打印一个破折号。也就是说,字符串thisatest将作为this-is-a-test打印


字符串文字不可修改。更改为:

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

  return 0;    
}

字符串文字不可修改。更改为:

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

  return 0;    
}

您正在向函数传递一个常量字符*(这是一个测试)。您的数组是一个字符串文字,当编译器看到它时,它被放入可执行文件rodata的一个特殊只读部分。事实上,其他变量也声明为const。诀窍就是知道你的字符串是一个常量字符*,而不是一个字符*

你正在向你的函数传递一个常量字符*,即这是一个测试。您的数组是一个字符串文字,当编译器看到它时,它被放入可执行文件rodata的一个特殊只读部分。事实上,其他变量也声明为const。诀窍就是知道你的字符串是一个常量字符*,而不是一个字符*

余浩的答案很好,而我有另一种方法来修复它:

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


它还可以打印正确的字符串,而不需要修改字符串。

余浩的回答很好,而我有另一种方法来修复它:

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



它也打印正确的字符串,而不需要修改字符串。

不允许修改字符串文字。你面对的是什么错误?…?你把这个问题标记为C和C++。是哪一个?这很重要,因为规则有微妙的不同。在C语言中,字符串文字的类型为char[N],但不允许修改它们。在C++中,它们有类型conchch[n],大多数编译器应该给你一个警告。请尽量在标题中表现得更富有表现力;尽量不要使用一般的术语,为什么这不起作用?但是为什么修改字符数组会导致崩溃?你不允许修改字符串文字。你面对的是什么错误???你把这个问题标记为C和C++。是哪一个?这很重要,因为规则有微妙的不同。在C语言中,字符串文字的类型为char[N],但不允许修改它们。在C++中,它们有类型conchch[n],大多数编译器应该给你一个警告。请尽量在标题中表现得更富有表现力;尽量不要使用一般的术语,为什么这不起作用?但是为什么修改字符数组会导致崩溃?这取决于代码是C还是C++。在C语言中,字符串文字是不可修改的,但由于历史原因,该类型只是char[]而没有常量。该字符串仍然放在只读内存中,但是如果使用char[],则会在数组中获得该字符串的可写副本,而不是直接指向该字符串的指针。虽然你说的很有趣-它是只读的,而不是常量?好吧,它也不必在只读内存中。在C中,字符串文字不是类型,只是历史原因,但是编译器仍然知道字符串文本的位置,所以保护它们没有问题。技术上,C99规范规定字符串文本不需要修改。没有依赖于代码是C或C++的const字符数组。在C语言中,字符串文字是不可修改的,但由于历史原因,该类型只是char[]而没有常量。该字符串仍然放在只读内存中,但是如果使用char[],则会在数组中获得该字符串的可写副本,而不是直接指向该字符串的指针。虽然你说的很有趣-它是只读的,而不是常量?好吧,它也不必在只读内存中。在C语言中,字符串文字不是const类型只是出于历史原因,但编译器仍然知道字符串文字的位置,因此保护它们没有问题。从技术上讲,C99规范规定,字符串文本不需要可修改…不具有const的类型数组char@YuHao函数sp_to_dash修改了OP代码中的字符串是什么意思。@ArmiaWagdy这是对已删除注释的过时响应,没关系。@YuHao你所说的sp_to_dash函数是什么意思?它修改了OP代码中的字符串。@ArmiaWagdy这是对现已删除的注释的过时响应,没关系。@ArmiaWagdy。。。说实话,如果我的答案有用的话,我真的希望有一个更高的投票:解决问题的有趣方法。在这种情况下,最好将参数str声明为const char*@LidongGuo您的答案对我非常有用,而且YuHao的答案也非常有用。但是我想知道为什么将参数声明为const char*更好,尽管我不能修改字符串文字,但我认为这并不重要here@ArmiaWagdy ... 说实话,如果我的答案有用的话,我真的希望有一个更高的投票:解决问题的有趣方法。在这种情况下,最好将参数str声明为const char*@LidongGuo您的答案对我非常有用,而且YuHao的答案也非常有用。但是我想知道为什么将参数声明为const char*更好,尽管我不能修改 字符串文本,我认为它在这里不重要