POpen使用字符串但不是变量

时间:2013-09-16 15:16:41

标签: c curl segmentation-fault popen

我可以得到以下工作:

fp = popen("curl http://192.168.0.144:8000/adder?wsdl", "r");

但是,当我这样尝试时:

char* cmd;
strcpy(cmd, "curl http://");
strcat(cmd, qrdata->ip_addr);
strcat(cmd, ":8000/adder?wsdl");

fp = popen(cmd, "r");

发生分段错误。

3 个答案:

答案 0 :(得分:5)

你需要为cmd分配内存:

    char cmd [256];

其中256-1 = 255是字符串可以包含的最大字符数

答案 1 :(得分:1)

您尚未初始化cmd变量。

待办事项

char* cmd = new char[MAX_LEN];

当然您需要定义MAX_LEN

#define MAX_LEN 1024

答案 2 :(得分:1)

您缺少将内存分配给char * cmd

如果使用gcc,您可以使用asprintf()分配尽可能多的缓冲区,以便将格式化字符串打印到:

#define _GNU_SOURCE
#include <stdio.h>

...

char * cmd = NULL;
asprintf(&cmd, "curl http://%s:8000/adder?wsdl", qrdata->ip_addr);

/* Use cmd. */

free(cmd);

注意:上面的示例假定qrdata->ip_addr是一个0终止的字符数组。