Системный wget типа переменной

#c #wget

#c #wget

Вопрос:

Итак, у меня есть несколько URL-адресов, хранящихся в массиве указателей символов, называемом url

Я хочу вызывать wget для каждого URL-адреса, но я продолжаю получать следующую ошибку.

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

Моя программа написана на C

 system("wget"   url[0]);
  

Комментарии:

1. я думаю, что c не поддерживает эту конкатенацию. Вам следует использовать system(strcat("wget", url[0])) .

2. codeomnitrix, ваш код вызывает UB — strcat ожидает, что в буфере назначения будет достаточно места для добавления источника. Не могли бы вы, пожалуйста, отредактировать его или преобразовать в ответ вместо этого?

Ответ №1:

В 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 */
  

Ответ №2:

В 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 ('') 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.
  

Поиск в Google «strncat» даст вам множество примеров того, как он используется.