【发布时间】:2013-09-04 11:09:46
【问题描述】:
我在这段简短的代码中尝试解决运行时分段错误时遇到了麻烦。我怀疑这与在代码中使用 system() 和 strcpy() 有关,但由于我没有遇到过这种类型的错误,我不确定该怎么做,到目前为止我还没有找到很多有用的页面。
代码:
#include <stdio.h>
#include <string.h>
int main(){
char command[31], string[128];
strcpy(string, (char *)system("grep -Po '(?<=testString\\s)\\S+' File"));
string[strlen(string)] = '\0';
printf("%s", string);
return 0;
}
我正在使用 GCC 4.7.3 来编译程序。非常感谢您对此提供的任何帮助。
【问题讨论】:
-
您正在将
int的返回值system转换为一个字符串......这没有什么好处。 -
你对
system的使用是错误的,你可能要使用popen(3) -
使用系统或其他 API cal 时,您应该阅读有关该调用的文档以确定它接受和返回什么。
system不返回您正在执行的命令的输出。它只提供一个返回码。如果要捕获输出,可以将system调用输出到调用后打开和读取的文件,或使用管道(popen等)。 -
除了
system错误之外,string[strlen(string)] = '\0';行完全是愚蠢的!如果字符串末尾不包含 0,strlen将搜索甚至超过缓冲区的一个,然后您将在已经存在的 0 上写入一个 0。该语句非常浪费,充其量没有,最坏的情况是分段错误。 -
感谢您的反馈@tristopia,我将删除该行。
标签: c segmentation-fault strcpy