0

我可以让以下工作正常:

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");

发生分段错误。

4

3 回答 3

5

你需要为cmd分配内存:

    char cmd [256];

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

于 2013-09-16T15:20:01.453 回答
1

您尚未初始化cmd变量。

char* cmd = new char[MAX_LEN];

当然你需要定义MAX_LEN

#define MAX_LEN 1024
于 2013-09-16T15:19:51.813 回答
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终止的字符数组。

于 2013-09-16T15:25:37.097 回答