-1
以下のコードは間違ったものです.......しかし以下のコードスニペットは同じ出力を生成します。しかし、どちらが正しいですか?
#include <stdio.h>
void fun(char* msg);
int main()
{
char* str = "Hello";
printf("%s\n",str);
fun(&str);
printf("%s\n",str);
return 0;
}
void fun(char* msg){
*msg = "World";
}
そして今、正しいコードスニペット
#include <stdio.h>
void fun(char** msg);
int main()
{
char* str = "Hello";
printf("%s\n",str);
fun(&str);
printf("%s\n",str);
return 0;
}
void fun(char** msg){
*msg = "World";
}
に正しく上記のコードの目的を動作するようですstrの値を変更することです。 両方のコードが同じ出力を生成しますが、この場合、間違ったコードが正しく動作するように見えます。
コードが未定義のビヘイビアを呼び出すと、時には_うまく動作するように見えます。時間を節約する - コンパイラの警告を有効にします。 – chux
私は "見える"とは言いません - 未定義とは、特定のコンパイラやシステムで、 "未定義"の操作が意図した通りに動作することを意味します。 –
@GovindParmarこのコードは実際には*制約違反ですコンパイラは診断メッセージを発行する必要があります(生成された実行ファイルは無意味です) –