c - 相同的程序 GCC 崩溃但 msvc 可以工作

标签 c gcc visual-c++

我用C编写了一个程序,在gcc中编译时降低字符串,运行时崩溃。 但在MSVC中程序运行顺利。

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

char *strlower(char *s){
    for ( ; *s; ++s) *s = tolower(*s);
    return (char *)s;
}

int main(){
    char *c = "HELLO";

    strlower(c);
    printf("%s",c);
    return 0;
}

如果变量 c是数组,那么程序可以在两个编译器中运行。为什么在 gcc 中使用指针时不起作用?

最佳答案

在 C 语言中,所有字符串文字都是只读字符数组。尝试修改字符串文字会导致未定义的行为。这就是当有指向字符串文字的指针时应仅使用 const char * 的原因。

尝试使用您自己的数组:

char c[] = "HELLO";

关于c - 相同的程序 GCC 崩溃但 msvc 可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40651421/

相关文章:

gcc - 为什么 "R_X86_64_32 can not be used when making a shared object"的 CMake 解决方案特定于 x86_64?

c - XTC文件读取错误

c - uint8_t 数组 - 内存中的数据

c++ - "return"关键字之后的语句会被执行吗?

C 中的客户端和服务器 send() 和 recv()

代码未执行

c++ - 从 32 位移植到 64 位

c++ - C++ 对象中的可变长度参数列表

c - ‘struct file_operations’ 的强制函数

c - ubuntu 12.04 中 gtk2 应用程序中的链接错误