代码中的运行时错误
Runtime error in the code
在下面的程序中旋转字符串运行时发生错误。请帮忙
代码中没有编译错误
#include <iostream>
#include <cstring>
using namespace std;
void reverseString(char* str, int start, int end)
{
int front = start;
int back = end;
while (front < back)
{
/* swap two variables without
using a temporary one.*/
str[front] ^= str[back];
str[back] ^= str[front];
str[front] ^= str[back];
++front;
--back;
}
return;
}
这部分用于旋转琴弦
void rotateString(char* str, int k)
{
if (!str || !*str)
return;
int len = strlen(str);
/*Rotating a string by it's length is string itself.*/
k %= len;
reverseString(str, 0, len-1);
reverseString(str, 0, k-1);
reverseString(str, k, len-1);
cout<<str;
return;
}
int main() {
rotateString("abcde",2);
return 0;
}
这是因为您尝试修改文本字符串。所有文本字符串都是常量且只读的。尝试修改一个会导致未定义的行为,有时似乎有效,有时崩溃。
尝试例如
char str[] = "abcde";
rotateString(str, 2);
您在此处传递字符串文字:
rotateString("abcde",2);
并随后尝试修改它,这是未定义的行为。2.14.5
字符串文字部分中的C++标准草案说(强调我的):
是否所有字符串文本都是不同的(即,存储在非重叠对象中)是实现定义的。尝试修改字符串文本的效果是不确定的。
另一方面,此代码将用于调用未定义的行为:
char arr[] = "abcde" ;
rotateString(arr,2);
rotateString("abcde",2);
你正在传递一个字符串文字(这是一个const)来rotateString()。实际上,编译器会创建一个常量临时字符串变量/char[],并将"abcde"存储在其中并将其传递给函数rotateString()。
由于您无法编辑/修改常量,这就是您收到错误的原因。
溶液:
Store "abcde" in a char[] and passing it to rotateString()
相关文章:
- 为什么此代码存在运行时错误?
- 蝴蝶代码 88.合并排序数组 c++ 运行时错误
- 在Hackerearth上获取运行时错误(SIGSEGV),无法找出代码中的问题
- 为什么我在此代码中收到运行时错误
- 我的代码上的运行时错误 sigsegv
- 矢量的 c++ 代码中的运行时错误
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 我的代码中出现运行时错误的可能原因是什么?
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- .NET CORE 2 DLL引用带有C 代码运行时错误
- 为什么我的代码给出运行时错误超时
- 为什么我的程序在删除以下代码中的注释后会出现运行时错误?
- 薄板样条形状转换运行时错误 [使用代码 -1073741819 退出]
- C 代码的运行时错误(基于指针)
- 代码中的运行时错误,用于求解最小的偶数可整除
- 为什么我的代码导致运行时错误
- 为什么矢量上的这段代码会给出运行时错误
- 涉及向量的初学者代码,SEIGSEV运行时错误
- 为什么这段代码会产生运行时错误