我写了一个小程序,从中获取一些输入参数*argv[]并打印它们.几乎在所有用例中,我的代码都运行得很好.只有在我想要作为参数传递的字符串末尾使用多个感叹号时才会出现问题...
这有效:
./program -m "Hello, world!"
Run Code Online (Sandbox Code Playgroud)
这不起作用:
./program -m "Hello, world!!!!"
Run Code Online (Sandbox Code Playgroud)
^^如果我这样做,程序输出要么是该字符串的两倍,要么是我在./program之前输入的命令.
但是,我绝对不明白:以下,奇怪的是,它的工作原理:
./program -m 'Hello, world!!!!'
Run Code Online (Sandbox Code Playgroud)
^^输出正是......
Hello, world!!!!
Run Code Online (Sandbox Code Playgroud)
......正如所希望的那样.
所以,我的问题是:
""是字符串和''单个字符.那么为什么我在使用时会得到所需的结果'',而不是在""我应该使用时(根据我的理解)?我的代码的相关部分:
// this is a simplified example that, in essence, does the same
// as my (significantly longer) code
int main(int argc, char* argv[]) {
char *msg = (char *)calloc(1024, sizeof(char));
printf("%s", strcat(msg, argv[2])); // argv[1] is "-m"
free(msg);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试先将内容复制argv[2]到char*缓冲区中并附加一个缓冲区 …