Printf导致崩溃
printf causes crash
#include <stdio.h>
int main(char sendbuf[100])
{
printf (sendbuf);
return 0;
}
当我试图使用这个非常基本的程序时,不知何故它崩溃了,它的意思是打印任何输入作为参数的东西。如果我删除"printf (sendbuf);"行,崩溃就会消失。
main
的第一个参数是参数的个数。第二个参数是一个字符串数组。第二个参数的第一个元素(索引0)是程序的名称:
#include <stdio.h>
int main(int c, char **argv)
{
printf ("%sn", c > 1 ? argv[1] : "No Argument");
return 0;
}
第一个参数必须是整数,不能是字符数组。下面是正确的程序:
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc > 1) {
printf( argv[1] );
}
else {
printf( "No arguments provided" );
}
return 0;
}
argv[0]是你的程序名,所以argv[1]是命令行提供的第一个参数。
C支持两种形式的main函数:
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
要从main中获取参数,需要将代码更改为:
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc > 1){
printf ("%sn", argv[0]);
}
return 0;
}
或者使用stream:
#include <iostream>
int main(int argc, char* argv[])
{
if (argc > 1){
std::cout << argv[0]) << std::endl;
}
return 0;
}
实现必须支持main
的以下两个定义:
int main() { }
int main(int argc, char* argv[]) { }
它是实现定义的,无论它们是否支持任何其他定义。我不知道任何实现允许int main(char*)
虽然(这是你的等效)。
这将打印您在命令行中输入的所有内容,包括程序名后面的空格。如果您在程序名后不输入任何内容,它将不会崩溃。
#include <stdio.h>
int main(int argc, char **argv)
{
for(int i=1; i<=argc; ++i) {
printf("%sn", argv[i]);
}
}
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 内联程序集printf将整数解释为地址
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 仅包含一个 printf 的程序崩溃
- Printf导致崩溃