2016-11-17 51 views
-1

我已經寫了一個程序在C編譯它在gcc中時降低字符串,它運行時崩潰。 但是在MSVC程序中運行平穩。相同的程序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中使用指針時爲什麼不工作?

+2

修改字符串字面給人不確定的行爲。當行爲未定義時,允許發生任何事情,包括來自不同編譯器的不同行爲。這兩個編譯器都是正確的。 – Peter

回答

2

在C中,所有字符串文字都是只讀字符數組。試圖修改字符串文字導致未定義的行爲。這就是您在指向字符串文本時只應使用const char *的原因。

嘗試使用自己的陣列,而不是:

char c[] = "HELLO"; 
相關問題