-1
gccでコンパイルすると文字列を小さくするためにCでプログラムを作成しましたが、実行するとクラッシュします。 しかし、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でポインタを使用しているとどうしてうまくいかないのですか?
は、文字列リテラルを変更するには、未定義の動作を提供します。ビヘイビアーが定義されていないときは、異なるコンパイラーからの異なるビヘイビアーを含む何かが起こることが許されます。どちらのコンパイラも正しいです。 – Peter