运行时出现C应用程序错误

问题描述:

我已经构建了一个C应用程序,当我构建它时,它没有显示任何错误,但是当我运行它时,它给了我错误“Segmentation Fault:11”。 如果有帮助,这里是我使用的代码:运行时出现C应用程序错误

#include <stdio.h> 
int main(char *argv[]) { 
printf("The project path is: ./Projects/%c", argv[1]); 
return 0; 
} 

你有许多问题:

  • main的签名是参数的数量,接着为C字符串数组。
  • 在使用数组之前,您应该始终检查计数。
  • 该数组是字符串,因此您需要%s来打印它们。

这应该工作:

#include <stdio.h> 
int main(int argc, char *argv[]) { 
    if (argc < 2) 
     fprintf (stderr, "Wrong number of arguments\n"); 
    else 
     printf ("The project path is: ./Projects/%s\n", argv[1]); 
    return 0; 
} 
+0

时,它仍然没有打印输入的字符串。我正在处理所有的响应,并且我确保尝试每个人,但是我没有发现我打算使用%s而不是printf上的%c,从现在开始,我会记得检查是否有足够的命令行参数。谢谢 :) – Matthew 2012-04-10 09:49:34

正确main原型语法

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

而且%c转换说明在printf打印字符,打印字符串中使用%s

  1. 更改签名int main(int, char*[]);
  2. 参数是你传递给过程是什么?如果你不传递任何argv[1]超出范围
+0

我传递1个参数的方案,这是该项目的名称。但是,当我使用argv [1] – Matthew 2012-04-10 09:44:30

首先,改变你的主要以:

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

其次,你有你传递给printf的东西之间的不匹配,和你已经告诉你,你会通过。 argv[1]是一个指针到字符,而不是一个字符。你需要/想使用%s转换将其打印出来:

printf("The project path is: ./Projects/%s", argv[1]); 

在这种特定的情况下,它不是真正的强制性检查足够的参数,因为即使你不传递任何命令行参数, argv将至少包含argv[0]后跟空指针。因此,使用argv[1]是安全的,但是如果您未通过命令行参数,则可能会打印为类似(null)的内容。

尽管如此,在使用argv之前,您通常需要检查argc的值。在这种情况下,你可以避开它,但只是或多或少偶然发生。试图以相同的方式使用argv[2]可能会导致未定义的行为。

除了其他建议,您可能需要重新访问您的printf格式。 %c用于打印单个字符,并且argv[1]char *。请使用argv[1][0]或其他类型,或使用字符串格式说明符%s