gpt4 book ai didi

c - 在动态数组上使用 tolower() 时出现段错误

转载 作者:行者123 更新时间:2023-11-30 18:17:57 26 4
gpt4 key购买 nike

我将此代码放在我的 C 编译器 (Dev Cpp) 上。

char *str = "SomeTHing";
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}

这会产生段错误,而如果我使用静态数组,

char str[10] = "SomeTHing";

循环工作正常。谁能告诉我为什么会发生这种情况吗?

最佳答案

char *str = "SomeTHing";只读内存分配给指针str。以任何方式更改其内容都是未定义的行为。在您的系统上,这表现为崩溃。遗憾的是 (i) 您的编译器没有警告您将其分配给 char* 而不是 const char* 或 (ii) 您忽略了警告。

char str[10] = "SomeTHing"; 在堆栈上分配缓冲区,包括空终止符。更改其内容定义,但如果您想使用依赖于它的一些字符串库函数(例如strlen),则需要保持空终止符完整。

关于c - 在动态数组上使用 tolower() 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25909130/

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