gpt4 book ai didi

c - 从 c 中的字符串中删除尾随空格时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:37 25 4
gpt4 key购买 nike

我正在尝试删除字符串末尾的空格。我有以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char *trim(char *str) {
char *end;
end = str + strlen(str) - 1;
while(end > str && isspace((unsigned char)*end)) {
end--;
}
*(end++) = '\0'; //this line causes the segfault
return str;
}

int main(void) {
char *str = "mystring ";
printf("before trim string is %s\n", str);
printf("length before: %d\n", strlen(str)); //should be 10
str = trim(str);
printf("after trim string is %s\n", str);
printf("length after: %d\n", strlen(str)); //should be 8
return 0;
}

当我运行代码时,出现段错误。我不确定的是为什么将指针“end”递增 1,然后将它指向的值从空白更改为空终止符会导致段错误。我读过在 C 中递增指针以使指针不指向数组元素是未定义的行为。但是,“mystring”末尾的空格不会仍然是字符数组 str[] 的一部分吗?非常感谢任何帮助。

最佳答案

这里的问题是导致崩溃的行试图修改字符串文字,这会导致未定义的行为。

根据 https://en.cppreference.com/w/c/language/string_literal ,

String literals are not modifiable (and in fact may be placed in read-only memory such as .rodata). If a program attempts to modify the static array formed by a string literal, the behavior is undefined.

您必须确保将 char* 传递给可修改的数组,例如您使用 malloc() 分配给自己的数组。

关于c - 从 c 中的字符串中删除尾随空格时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51509941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com