我可以让以下工作正常:
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");
发生分段错误。
我可以让以下工作正常:
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");
发生分段错误。
你需要为cmd分配内存:
char cmd [256];
这256-1 = 255
是您的字符串可以包含的最大字符数
您尚未初始化cmd
变量。
做
char* cmd = new char[MAX_LEN];
当然你需要定义MAX_LEN
#define MAX_LEN 1024
您缺少将内存分配给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
终止的字符数组。