Как ввести в массив - PullRequest
       19

Как ввести в массив

0 голосов
/ 14 августа 2010
main(int c,char **args){
int i
char input[100];
bzero(input,100);
for(i=1;i<c;i++)
  {
    input=strcat(input,args);
    input=strcat(input," ");
  }

}

Я включил заголовочный файл string.h ....

Я хочу, чтобы вводимые мной данные в командной строке сохранялись во входном массиве.Может кто-нибудь, пожалуйста, исправьте мой код .. Спасибо.

Ответы [ 7 ]

2 голосов
/ 14 августа 2010

У вас есть две фатальные проблемы: во-первых, вам необходим доступ к args[i] члену массива аргументов, а во-вторых, вы не можете напрямую назначить переменную input, поскольку это массив.

Дополнительно:

  • Вы должны убедиться, что в массиве input достаточно места;
  • Это хороший стиль для явного возврата значения из main();
  • Пробелы дешевы, используйте его.

Вот как это выглядит с исправленными проблемами:

int main(int c, char **args)
{
    int i;
    char input[100];

    bzero(input, 100);

    for(i = 1; i < c; i++)
    {
        if (strlen(input) + strlen(args[i]) + 2 <= 100)
        {
            strcat(input, args[i]);
            strcat(input, " ");
        }
    }

    puts(input);

    return 0;
}

(я также включил строку puts(), чтобы вы могли видеть, что заканчивается в input).

1 голос
/ 14 августа 2010

Это решит проблему.

  main(int c,char **args){
    int i
    char input[100];
    bzero(input,100);
    for(i=1;i<c;i++)
      {
        strcat(input,args[i]);
        strcat(input," ");
      }
    }
0 голосов
/ 14 августа 2010

Если вы не хотите ограничивать вашу программу вводом 100 символов. Вы можете использовать realloc для динамического расширения размера массива input .

И избегайте использования bzero , вместо этого используйте memset , который является частью стандарта. Даже если вы можете опустить эту строку.

int main(int c, char **args) {
int i;
int limit = 100;
char *input = calloc(limit,sizeof(limit));

memset(input,0, limit * sizeof(char)); // No need but better than bzero.
for (i=0;i<c;i++) {
    if (strlen(input) + strlen(args[i]) + 2 > limit) { //avoiding input overflow.
       limit = strlen(input) + strlen(args[i]) + 2;
       input = realloc(input,limit);
    }
    strcat(input,args[i]);
    strcat(input," ");
}
puts(input);
free(input);
return 0;

}

0 голосов
/ 14 августа 2010
main(int c, char **args)
{
  while( c-- )
    printf(" %s",*args++);
  return 0;
}
0 голосов
/ 14 августа 2010

int c - это число аргументов плюс имя файла, значение c которого является целым числом и задается как (количество переданных аргументов + 1)

char ** args содержит указатели, которые указывают на передаваемые вами аргументы.

вам нужно изменить 7-ю строку вашей программы следующим образом;

input = strcat (input, args [я]);

0 голосов
/ 14 августа 2010

"char ** args" - это уже массив строк.Это то же самое, что сказать "char * args []".

0 голосов
/ 14 августа 2010

Ты рядом - попробуй strcat(input, args[i]).

...