Сначала включите предупреждения компиляции. Вы должны получать предупреждения, потому что ваш код недействителен. Например, с помощью gcc я получаю:
randstr.c: In function ?main?:
randstr.c:16:15: warning: assignment makes integer from pointer without a cast [enabled by default]
str [0][0]="good";
^
randstr.c:17:14: warning: assignment makes integer from pointer without a cast [enabled by default]
str[1][M]="morning";
^
randstr.c:18:14: warning: assignment makes integer from pointer without a cast [enabled by default]
str[2][M]="world";
Это потому, что вы присваиваете символьные строковые указатели char
элементам в массиве, и каждый элемент char содержит один символ (обычно, 8 битов.)
Более простой способ кодирования этого кода - использовать char *str[N]
вместо char str[N][M]
.
Но причина, по которой ваша программа падает с ошибкой сегментации, заключается в том, что time()
принимает аргумент, а вы его не проходитеПопробуйте time(NULL)
.
Вот как это будет закодировано с использованием char *str[N]
:
#include <stdio.h>
#include <stdlib.h>
#define N 3
int main(int argc, char *argv[]) {
srand(time(NULL)); //to generate each run different numbers
char *str[N];
int i,j;
str[0] = "good";
str[1] = "morning";
str[2] = "world";
for (j=0; j<N; j++) {
i = rand() % N; //formula to generate randoms numbers
printf("%s\n",str[i]);
}
return 0;
}