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

标签 c arrays tolower

我将此代码放在我的 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/

相关文章:

c - 包含 2 个文件的 Makefile

c - 当我插入较大的数字时程序崩溃

java - 尝试获取数组中的最大值时出错

php - 如何正确循环PHP中的数组键

c - 带指针的 toupper 和 tolower

c++ - 从文件中读取输入,将第一个字母大写,将其他字母小写,然后输出到单独的文件中

c# - 在这种情况下如何正确使用 .ToLower() ?

c - Win32 API 命令行参数解析

.net - 如何将枚举参数从组合框传递到另一个类(winform)

javascript - 为什么我制作的这个命令历史不起作用?