2012-12-21 467 views
-3
#include <stdio.h> 
int main(char sendbuf[100]) 
{ 
    printf (sendbuf); 
    return 0; 
} 

不知何故,当我尝试使用它时,这个非常基本的程序崩溃了,它意味着打印任何键入的参数。如果我删除行“printf(sendbuf);”坠毁消失了。printf导致崩溃

回答

1

您的第一个参数必须是整数,而不是char数组。这里是正确的程序:

#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]是提供TEH命令行中的第一个参数。

+0

program.exe'没有提供参数' –

+0

@JiveDadson:是的。我最初跳过了参数检查,以保持示例尽可能简单。无论如何,别人修改答案,我调整了一下,所以这是解决。 – RonaldBarzell

1

C支持两种主要功能:

int main() { /* ... */ } 
and 
int main(int argc, char* argv[]) { /* ... */ } 

要拍摄参数从主,则需要更改您的代码:

#include <stdio.h> 
int main(int argc, char* argv[]) 
{  
    if (argc > 1){ 
    printf ("%s\n", argv[0]); 
    } 
    return 0; 
} 

或者使用流:

#include <iostream> 
int main(int argc, char* argv[]) 
{  
    if (argc > 1){ 
    std::cout << argv[0]) << std::endl; 
    } 
    return 0; 
} 

argv [0]是应用程序名称,输入参数从argv [1]开始,如果有的话。

+0

为什么选择C++?这个问题被标记为C. – effeffe

+0

在C++之前被标记了,我已经更新了我的答案 – billz

+0

我正在使用C++,我的问题被其他人编辑... – user1882226

1

main的第一个参数是参数的数量。第二个参数是一个字符串数组。第二个参数的第一个元素(索引0)是你的程序的名称:

#include <stdio.h> 
int main(int c, char **argv) 
{ 
    printf ("%s\n", c > 1 ? argv[1] : "No Argument"); 
    return 0; 
} 
+0

我的测试用例是“program.exe”无参数“”。 –

0

的实现必须支持以下两个main定义:

int main() { } 
int main(int argc, char* argv[]) { } 

这是实现定义是否支持任何其他定义。我不知道任何允许int main(char*)的实现(这是你的等价物)。

0

这将在程序名称之后打印您在命令行中键入的所有内容,即使有空格也是如此。如果您在程序名称后面输入什么内容,它不会崩溃。

#include <stdio.h> 
int main(int argc, char **argv) 
{ 
    for(int i=1; i<=argc; ++i) { 
     printf("%s\n", argv[i]); 
    } 
}