@matanka

Как правильно инициализировать массив в C?

Компилятор выводит предупреждение C6001, не инициализирован массив a. Выводит все верно, но все равно ругается

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

int main() {
	char phone[100];
	char* d[100];

	scanf("%[^\n]", phone);
	char* piece;
	piece = strtok(phone, " ");
	int i = 0;
	while (piece != NULL)
	{

		d[i] = piece;
		piece = strtok(NULL, " ");
		i++;
	}
	for (i = 0; i < 10; i++) {
		if(i%2==0)
		printf("%s ",d[i]);
	}
	
	return 0;

}
  • Вопрос задан
  • 189 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В этом коде проблема не в том, что массив d не инициализирован, а в том, что колическтво итераций цикла вывода массива d не зависит от того, сколько элементов было занесено в этот массив. Правильным решением было бы как-то их связать, например так:
int i = 0, n;
while (piece != NULL)
{
    d[i] = piece;
    piece = strtok(NULL, " ");
    i++;
}
n = i;
for (i = 0; i < n; i++) {
    if(i%2==0)
        printf("%s ",d[i]);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
hydroargerum
@hydroargerum
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>

int main() {
	char phone[100];
	char *d[100];
	int i = 0;

	scanf("%[^\n]", phone);
	while (d[i++] = strtok(!i ? phone : NULL, " "));
	i = -1;
	while (d[++i]) {
		if (!(i & 1))
			printf("%s ", d[i]);
	}
	return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы