2013-09-16 48 views
0

我可以得到下面的精细工作: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"); 

分割故障发生。

+0

如何声明ip_addr? – alk

回答

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_addr0封端的字符数组。

+0

谢谢,asprintf函数真的很有用! – cxzp

1

您尚未初始化cmd变量。

char* cmd = new char[MAX_LEN]; 

,当然你需要定义MAX_LEN

#define MAX_LEN 1024 
+1

-1,在C代码中使用'new []'是没有意义的。 – unwind

5

你需要为CMD分配内存:

char cmd [256]; 

因此256-1 = 255是最大字符数你的字符串可以有

+2

这是一个非常保守的缓冲区。如“在问题中所示的例子太小” - 保守。 :) – unwind