c++ - char * 抛出段错误的反向函数

标签 c++ string segmentation-fault

我有以下简单的功能:

void reverse(char* str) {
    if (str == NULL)
        return;
    char* end = str;
    while(*end != NULL) {
        end++;
    }
    end--;  
    while(str < end){
        char temp = *str;
        *str++ = *end;
        *end-- = temp;
    }   
}

int main(int argc, char* argv[]) {
    char* second = "SOMETHING\0";
    cout << "Before Reverse String: " << second << '\n';
    reverse(second);
    cout << "Reverse String: " << second << '\n';
}

很简单吧?但是我在行中遇到了段错误

*str++ = *end 
*end-- = temp

我错过了什么?

谢谢!

最佳答案

你正在修改一个字符串文字:

char* second = "SOMETHING\0";

这是未定义的行为,一种解决方案是将文字分配给 char 数组:

char second[] = "SOMETHING";

此外,字符串文字将以 NULL 结尾,因此不需要添加 \0。您还应该修改 while 循环以与 \0 而不是 NULL 进行比较。虽然,它应该工作,因为它们都将评估为 0 因为 *end 是一个 char 它更好地阅读使用 \0:

while(*end != '\0')

关于c++ - char * 抛出段错误的反向函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17690610/

相关文章:

c++ - 使用 C++ 标准库在 Linux 上编译

C++编译时类的子类列表

mysql - 带有 WHERE 子句的 SELECT 作为字符串存储在另一个表中

javascript - 基于另一个字符串更新/添加字符串值

c++ - Xcode 5 控制台应用程序仅在通过 finder 启动时出现段错误

c++ - 如何使用 g++ 在 C++ 程序中链接节日 TTS 库

c# - 无法将结构从 C++ 返回到 C#

c - 对 `strlwr' 的 undefined reference

c - 将数据从结构体插入 C 中的堆栈

c++ - 为什么重命名我的变量可以防止段错误?