抛出字符的分段错误的反向函数

reverse function for a char* throwing segmentation fault

本文关键字:函数 错误 分段 字符      更新时间:2023-10-16

我有以下简单的函数:

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";
    cout << "Before Reverse String: " << second << 'n';
    reverse(second);
    cout << "Reverse String: " << second << 'n';
}

很简单,对吧?然而,我在线路中遇到分段故障

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

我错过了什么?

谢谢!

您正在修改字符串文字:

char* second = "SOMETHING";

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

char second[] = "SOMETHING";

此外,字符串文字将以NULL结尾,因此不需要添加。您还应该修改while循环以与而不是NULL进行比较。尽管如此,它应该起作用,因为它们都将评估为0,因为*endchar,所以使用:读起来更好

while(*end != '')

更改

char* second = "SOMETHING";

char second[] = "SOMETHING";

注意:字符串文字是不可修改的,并且不必在字符串文字中显式添加

while(*end != NULL) {

应该是

while(*end != '') {

NULL仅用于空指针。