C++ 反向字符串函数给了我一个分段错误
我正在温习我的C/C++技能。我试图实现一个反转字符串的函数,但每次运行程序时都会出现分段错误(内核转储)C++ 反向字符串函数给了我一个分段错误,c++,segmentation-fault,C++,Segmentation Fault,我正在温习我的C/C++技能。我试图实现一个反转字符串的函数,但每次运行程序时都会出现分段错误(内核转储) #include <stdio.h> #include <string.h> void revstr(char *str); int main() { char *str = "hello mofo!"; revstr(str); puts(str); return 0; } void revstr(char *str) {
#include <stdio.h>
#include <string.h>
void revstr(char *str);
int main()
{
char *str = "hello mofo!";
revstr(str);
puts(str);
return 0;
}
void revstr(char *str)
{
int start = 0;
int len = strlen(str);
int mid = len / 2;
int i, t;
printf("start: %d, mid: %d,len: %d\n", start, mid, len);
for ( i = start; i < mid; ++i )
{
printf("str[%d] swapping to str[%d]: %c, %c\n", i, len - 1 -i, str[i], str[len - 1 - i]);
t = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = t;
}
}
#包括
#包括
void revstr(char*str);
int main()
{
char*str=“你好,莫福!”;
revstr(str);
put(str);
返回0;
}
void revstr(char*str)
{
int start=0;
int len=strlen(str);
int-mid=len/2;
int i,t;
printf(“开始:%d,中间:%d,长度:%d\n”,开始,中间,长度);
对于(i=开始;i
此解决方案也给了我相同的seg故障:
#include <stdio.h>
#include <string.h>
void revstr(char *str);
int main()
{
char *str = "hello mofo!";
revstr(str);
puts(str);
return 0;
}
void revstr(char *str)
{
char *end = str;
char t;
if ( str )
{
while ( *end != 0 )
end++;
end--;
while ( str < end )
{
t = *str;
*str++ = *end;
*end-- = t;
}
}
}
#包括
#包括
void revstr(char*str);
int main()
{
char*str=“你好,莫福!”;
revstr(str);
put(str);
返回0;
}
void revstr(char*str)
{
char*end=str;
查尔特;
如果(str)
{
而(*end!=0)
end++;
结束--;
while(str
str
是字符串文字,默认为const
,将其更改为未定义行为,您希望改为:
char str[] = "hello mofo!";
str
是字符串文字,默认为const
,将其更改为未定义行为,您希望改为:
char str[] = "hello mofo!";
不能修改文字。既然我已经给出了有用的建议,那么在实际代码中反转字符串时要注意
std::reverse
。您需要展示您的工作。例如,分段错误发生在哪一行?谢谢,@chris,我知道std::reverse
,但我试着用C风格来做。你不能修改文字。既然我已经给出了有用的建议,那么在实际代码中反转字符串时要注意std::reverse
。您需要展示您的工作。例如,分段错误发生在哪一行?谢谢,@chris,我知道std::reverse
,但我试着用C风格来做这件事与const char*str=“你好,mofo!”不同代码>。此外,由于历史原因,字符串文字的类型为char[]
而不是const char[]
。@H2CO3:不符合标准工作草案中的2.14.5/8。@H2CO3:Correctchar*str=“hello mofo!”
与const char*str=“你好,mofo!”不同代码>。第二个版本是正确的。第一个版本依赖于一个不被推荐的“C++”特性。它没有更改基础类型的类型,但更改了指针类型,因此使用C库并不痛苦。但导致此问题的是未定义的行为。char*str=“hello mofo!”
与const char*str=“你好,mofo!”不同代码>。此外,由于历史原因,字符串文字的类型为char[]
而不是const char[]
。@H2CO3:不符合标准工作草案中的2.14.5/8。@H2CO3:Correctchar*str=“hello mofo!”
与const char*str=“你好,mofo!”不同代码>。第二个版本是正确的。第一个版本依赖于一个不被推荐的“C++”特性。它没有更改基础类型的类型,但更改了指针类型,因此使用C库并不痛苦。但是导致这个问题的是未定义的行为。