我可以得到以下工作:
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");
发生分段错误。
答案 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
终止的字符数组。