2015-04-10 2 views
1

Удивительно, как хранить различные строки в массиве. Например, пользователь вводит «qwe», и программа затем сохранит это в переменной массива [0]. Ввод другую строку затем сохранить его в переменной [1] и так далееC - как хранить несколько строк в массиве

int 
main(int argc, char *argv[]) { 
    char variable[1000]; 
    int i; 

    printf("enter a variable\n"); 
    scanf("%s", variable); 
    for (i = 0; ??? ;i++) { 


     printf("The variable entered was: %s\n",variable[i]); 
    } 
return 0; 

Im новой для C, так что я понятия не имею, что им делать. но это то, что я придумал до сих пор, и задавался вопросом, смогу ли я помочь с заполнением остальных Спасибо!

+0

Ваш массив должен иметь тип 'char *', а не 'char'. И вам нужно выделить память для каждого из них. –

ответ

7

Вы можете использовать 2D-массив для хранения нескольких строк. За 10 строк каждый длиной 100

char variable[10][100]; 

printf("Enter Strings\n"); 
for (int i = 0; i < 10 ;i++) 
    scanf("%100s", variable[i]); 

Лучше использовать fgets читать строку.

fgets(variable[i], sizeof(variable[i]), stdin); 

Вы также можете использовать динамическое выделение памяти, используя массив указателей на char.

0

scanf возвращает количество успешных считанных параметров;

использование 2D массив для строки массива

Никогда не выходят из границ массива

#include <stdio.h> 

//Use defines or constants! 
#define NUM_STRINGS 10 
#define MAX_LENGTH_OFSTRING 1000 

int main() { 
    char variable[NUM_STRINGS][MAX_LENGTH_OFSTRING +1 /*for '\0' Null Character */]; 
    int i = 0; 

    printf("enter a variable\n"); 
    while(scanf("%s", variable[i]) > 0){//if you print Ctrl+Z then program finish work. Do not write more than MAX_LENGTH_OFSTRING symbols 
     printf("The variable entered was: %s\n",variable[i]); 
     i++; 
     if(i >= NUM_STRINGS) 
      break; 
    } 
return 0; 
} 
0

Наиболее эффективный способ, чтобы иметь массив символьных указателей и выделить память для них необходимо:

char *strings[10]; 

int main(int ac, char *av[]) { 
    memset(strings, 0, 10 * sizeof(char *)); 

    for (int i = 0; i < 10; i += 1) { 
     char ins[100]; 
     scanf("%100s", ins); 

     strings[i] = malloc(strlen(ins) + 1); 
     if (strings[i]) { 
      strcpy(strings[i], ins); 
     } 
    } 
    } 
1

variable[0] только что сохранил первую букву строки. Если вы хотите сохранить несколько строк в массиве, вы можете использовать 2D-массив . имеет структуру, как

arr[3][100] = { "hello","world", "there"} 

и вы можете получить доступ к ним, как

printf("%s", arr[0]); один за другим.

Смежные вопросы