相同的程序GCC崩溃,但msvc工作

时间:2016-11-17 09:43:13

标签: 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中使用指针时为什么不工作?

1 个答案:

答案 0 :(得分:2)

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

尝试使用您自己的数组:

char c[] = "HELLO";