Я пытаюсь получить первое значение пустого инициализированного массива string.I пробовал каждый метод, о котором я могу думать без везения. Я получаю предупреждение, ошибки или ошибку сегментации. Каков правильный способ печати нулевого значения и использовать его в инструкции if? Как только я получу это, я хотел бы получить это для цикла в конце печати строк, не равных нулю.получение первого значения пустого инициализированного массива строк
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char** argv)
{
char *strings_line_tokens[503] = {0};
int i = 0;
strings_line_tokens[0] = malloc(strlen("cookies")+1);
strcpy(strings_line_tokens[0], "cookies");
strings_line_tokens[2] = malloc(strlen("FOOBAR")+1);
strcpy(strings_line_tokens[2], "FOOBAR");
printf("strings_line_tokens[]: %s\n",strings_line_tokens[0]);
printf("-------------------\n");
printf("strings_line_tokens[]: %c %d \n",(char)strings_line_tokens[1], (int)strings_line_tokens[1]);
printf("aaaaaaaaaaaaaaaa\n");
printf("strings_line_tokens[]: %c %d \n",strings_line_tokens[1], strings_line_tokens[1]);
printf("bbbbbbbbbbbbbbbb\n");
printf("strings_line_tokens[]: %c %d \n",(char)strings_line_tokens[1][0], (int)strings_line_tokens[1][0]);
printf("ccccccccccccccccccc\n");
printf("strings_line_tokens[]: %c %d \n",strings_line_tokens[1][0], strings_line_tokens[1][0]);
printf("-------------------\n");
if(strings_line_tokens[1] == 0)
printf("You have a NULL \n");
for(i = 0; i < 3; i++)
if(strings_line_tokens[i] != 0)
printf("strings_line_tokens[]: %s\n",strings_line_tokens[i]);
return 0;
}
Вот текущие предупреждения, которые я получаю.
main.c:13: warning: cast from pointer to integer of different size
main.c:13: warning: cast from pointer to integer of different size
main.c:15: warning: format ‘%c’ expects type ‘int’, but argument 2 has type ‘char *’
main.c:15: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘char *’
Вот обновление, на которое просил М. М.. Klas Lindbäck показал, как получить мою конечную цель, которая была для цикла.
Из прошлого опыта при использовании массива символов, который был инициализирован с null
% с получением бы мусора в Е() и% D дало бы значение ASCII из null
, который находится в Printf 0(). Так я думал, что один из них будет давать мусор и значение ASCii 0.
printf("strings_line_tokens[]: %c %d \n",(char)strings_line_tokens[1], (int)strings_line_tokens[1]);
printf("aaaaaaaaaaaaaaaa\n");
printf("strings_line_tokens[]: %c %d \n",strings_line_tokens[1], strings_line_tokens[1]);
printf("bbbbbbbbbbbbbbbb\n");
printf("strings_line_tokens[]: %c %d \n",(char)strings_line_tokens[1][0], (int)strings_line_tokens[1][0]);
printf("ccccccccccccccccccc\n");
printf("strings_line_tokens[]: %c %d \n",strings_line_tokens[1][0], strings_line_tokens[1][0]);
printf("-------------------\n");
Выход я надеялся с одним из них.
garbage 0
Что вы пытаетесь сделать? Кроме того, вы очень часто повторяетесь. Рассмотрим рефакторинг для большего количества функций. Почему вы снова и снова печатаете строки одного символа? – AustinWBryan
В вашем коде есть 2 ошибки. 'int i = 0' missing'; 'и вы заканчиваете блок вашего цикла с помощью' {'вместо'} ' – Flikk
strings_line_tokens [1] имеет тип char *, поэтому приведение к char или int здесь не имеет смысла. Единственное, что должно работать как ожидалось, это последний и второй для последнего printf с использованием strings_line_tokens [1] [0], который имеет тип char. – Georg