2011-05-19 129 views
0

的系统的wget所以,我有几个链接的存储在一个名为URL变量类型

我想呼吁每个URL wget的字符指针数组,但我不断收到以下错误。

invalid operands to binary + (have 'char *' and 'char *') 

我的程序是用C

system("wget" + url[0]); 
+2

C不支持这种级联,我认为。你应该使用'system(strcat(“wget”,url [0]))'。 – codeomnitrix 2011-05-19 06:47:05

+1

codeomnitrix,你的代码调用UB - 'strcat'期望目标缓冲区有足够的空间来追加源代码。你可以编辑它或将它转换为答案,而不是? – 2011-05-19 06:53:56

回答

0

在C语言中,你可以使用+运营商不能连接两个字符串。使用strncat代替:

NAME 
     strcat, strncat - concatenate two strings 

SYNOPSIS 
     #include <string.h> 

     char *strcat(char *dest, const char *src); 

     char *strncat(char *dest, const char *src, size_t n); 

DESCRIPTION 
     The strcat() function appends the src string to the dest string, over‐ 
     writing the null byte ('\0') at the end of dest, and then adds a termi‐ 
     nating null byte. The strings may not overlap, and the dest string 
     must have enough space for the result. 

     The strncat() function is similar, except that 

     * it will use at most n characters from src; and 

     * src does not need to be null-terminated if it contains n or more 
      characters. 

     As with strcat(), the resulting string in dest is always null-termi‐ 
     nated. 

     If src contains n or more characters, strncat() writes n+1 characters 
     to dest (n from src plus the terminating null byte). Therefore, the 
     size of dest must be at least strlen(dest)+n+1. 

谷歌搜索“strncat函数”会给你足够的如何使用它的例子。

2

在C中,+运算符不适用于字符串。连接两个字符串和结果传递给system()你可以做到以下几点:

char buffer[ENOUGH_SPACE_TO_HOLD_CONCATENATED_RESULT]; /* Destination buffer for our command */ 
snprintf(buffer, sizeof(buffer), "wget %s", url[0]); /* You can also use strcat and friends for this step */ 
system(buffer);           /* Now execute it */