Другие языки программирования и технологии

Как задать двумерный массив строк в C? Как его потом заполнять?

Т.
Т.м.т .
1 929
Можно и так.. .

// _70077822
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>

void main()
{
const int size = 3;
const int str_size = 80;
char a[80];

char ** strings = (char **) malloc(size * sizeof(char *));
for (int n = 0; n < size; n++)
{
printf("\n Enter %d line... \n", n + 1);
strings[n] = (char *) malloc(size * sizeof(char));
strcpy(strings[n], gets(a));
}

system("cls");

for (int n = 0; n < size; n++)
puts((char *)strings[n]);

for (int n = 0; n < size; n++)
free(strings[n]);
free(strings);

getch();
}
АГ
Андрей Гаврильчук
90 018
Лучший ответ
Андрей Гаврильчук И у меня ошибка, к тому же так практичнее...

// _70077822
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>

void main()
{
const int size = 3;
char a[80];
int str_size;

char ** strings = (char **) malloc(size * sizeof(char *));
for (int n = 0; n < size; n++)
{
printf("\n Enter %d line... \n", n + 1);
gets(a);
str_size = strlen(a) + 1;
strings[n] = (char *) malloc(str_size * sizeof(char));
strcpy(strings[n], a);
}

system("cls");

for (int n = 0; n < size; n++)
puts((char *)strings[n]);

for (int n = 0; n < size; n++)
free(strings[n]);
free(strings);

getch();
}
Можно так, например:

#include <stdio.h>
#include <string.h>

int main () {
char *ss[5]; // массив из пяти указателей на char
int c;

// создаем и сразу же заполняем
for (c = 0; c < 5; ++c) {
char str[100];
fgets(str, 100, stdin);
str[strlen(str) - 1] = 0; // последний символ '\n', убираем
ss[c] = (char *)malloc(strlen(str));
strcpy(ss[c], str);
}
puts("");

// выводим
for (c = 0; c < 5; ++c) {
printf("%s\n", ss[c]);
}

// удаляем
for (c = 0; c < 5; ++c) {
free(ss[c]);
}
return 0;
}
Павел Русин
Павел Русин
51 508
Павел Русин Лажанулся насчет двумерного массива. Вот двумерный с динамическим созданием строк:

#include <stdio.h>
#include <string.h>
#define N 3
#define M 4
int main () {
char *ss[N][M];
int r, c;
// создаем и заполняем
for (r = 0; r < N; ++r) {
for (c = 0; c < M; ++c) {
char str[10];
fgets(str, 10, stdin); // маленькие строки, не больше 9 символов
str[strlen(str) - 1] = 0; // последний символ '\n', убираем
ss[r][c] = (char *)malloc(strlen(str));
strcpy(ss[r][c], str);
}
}
puts("");
// выводим
for (r = 0; r < N; ++r) {
for (c = 0; c < M; ++c) {
printf("%""10s", ss[r][c]);
}
puts("");
}
// удаляем
for (r = 0; r < N; ++r) {
for (c = 0; c < M; ++c) {
free(ss[c]);
}
}
}
Задать-то не сложно, но что понимается под заполнением?
1 1
1 1
76 473
Т.м.т . Присвоить значения строкам.
Прикольно, первый раз такое встречаю =) А так не катит (например char[n][m] ) ? Только указать строковый тип. Хотя наверное компилятор ругаться будет
Яяя ***
Яяя ***
4 073
Т.м.т . Разве в си есть строковые типы? Только массивы из символов.
Лера, читайте документацию. Если вопросы, можете ко мне в приват. На вопросы отвечу, но за вас делать не буду.
int arr[size1][size2];

Заполнение:

for(int i = 0; i < size1; i++)
for(int j=0;j< size2; j++)
{
arr[j] = 1; // твое значение
}
Т.м.т . Это двумерный массив целочисленных чисел.
А мне нужен двумерный массив строк.