【问题标题】:What is the issue with this reverse array code in c++?c++ 中的这个反向数组代码有什么问题?
【发布时间】:2015-03-17 03:20:40
【问题描述】:

程序编译正常,但运行时崩溃并显示: 进程以 -1073741819 状态终止

void reverse(char *str){

    char * end1 = str;
    char tmp = 'c';
    if(str){
        while(*end1){
            ++end1;
        }
        --end1;

        while(str<end1){
            tmp=*str;
            *str=*end1;
            *end1=tmp;
            str++;
            end1--;
        }
    }
}

有什么想法吗?

【问题讨论】:

  • 你怎么打电话给reverse?您确定您传递的字符串是可修改的吗? IE。 不是 char* str = "foo";.
  • 猜测字符串文字。
  • 是的,这个功能看起来不错。您可能会在非法输入时调用它。
  • 不确定但您使用过using namespace std; 吗?这可能与std::endl 和char* endl 发生冲突

标签: c++ arrays pointers char


【解决方案1】:

您的reverse 实现绝对没有问题:只要您传递的字符串以空值结尾且可写,您的代码就可以工作。

那么你调用它的方式一定有问题。最常见的可能性是传递一个字符串文字,写入它是可能导致崩溃的未定义行为:

char *s = "quick brown fox";
reverse(s); // <<== This would be undefined behavior

Demo of your working code.

【讨论】:

  • 谢谢,我没有注意我调用函数的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 2015-02-16
  • 2015-02-23
相关资源
最近更新 更多