2013-09-16 3 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에 메모리를 할당하지 않았습니다.

#define _GNU_SOURCE 
#include <stdio.h> 

... 

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

/* Use cmd. */ 

free(cmd); 

참고 :

GCC를 사용하면 서식 첨부 캐릭터 라인을 가지고 필요한만큼 버퍼를 할당 asprintf()를 사용할 수있는 경우

가에 인쇄 된 예는 위의 qrdata->ip_addr0로 끝나는 문자 배열입니다 가정합니다.

+0

감사합니다, asprintf 함수는 정말 유용합니다! – cxzp

1

cmd 변수를 초기화하지 않았습니다.

char* cmd = new char[MAX_LEN]; 

를 수행 물론 당신은 당신이 cmd를위한 메모리를 할당 할 필요가 MAX_LEN

#define MAX_LEN 1024 
+1

-1, C 코드에서'new []'를 사용하는 것이 의미가 없습니다. – unwind

5

정의해야

char cmd [256]; 

이에 256-1 = 255 문자의 최대 수입니다 너의 문자열은 가질 수있다

+2

그것은 매우 보수적 인 버퍼입니다. "질문에 표시된 예는 너무 작다"- 보수 주의자. :) – unwind