由于某些原因,将\n
添加到printf()
会更改以下代码的行为。没有\n
的代码打印(null)
而代码\n
导致Segmentation fault
。将换行符添加到printf()更改代码行为
Printf.c
#include <stdio.h>
int main(int argc, char* argv[]){
printf("%s", argv[1]);
}
Printf.c - 输出
$ gcc -o Printf Printf.c
$ ./Printf
(null)
Printf_Newline.c
#include <stdio.h>
int main(int argc, char* argv[]){
printf("%s\n", argv[1]);
}
Printf_Newline.c - 输出
$ gcc -o Printf_Newline Printf_Newline.c
$ ./Printf_Newline
Segmentation fault (core dumped)
我很想了解这背后的原因。
未定义的行为未定义。 – alk
请解释你使用哪种编译器(* gcc *哪个版本),以及在哪种操作系统下,环境信息在这种情况下非常相关。 –
谁知道当你的代码有一个错误会导致未定义的行为时会发生什么。也许下次你运行它时,世界将会结束 - 最好修正错误:) –