我正在尝试获取string的null initialed数组的第一个值。我已经尝试了所有我能想到的方法,没有运气。我要么得到警告,错误或分段错误。什么是打印空值的正确方法,并在if语句中使用它?一旦我弄明白这一点,我想在最后打印字符串不等于null。
#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 *’
这是M.M要求的更新。 KlasLindbäck展示了如何实现我的终极目标,即for循环工作。
从使用初始化为null
%c的char数组的过去经验中,将在printf()中给出垃圾,而%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
答案 0 :(得分:2)
for
循环已经在运行。
我删除了试错代码并保留了for
循环:
#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");
for(i = 0; i < 3; i++)
if(strings_line_tokens[i] != 0)
printf("strings_line_tokens[%d]: %s\n", i,strings_line_tokens[i]);
return 0;
}
输出:
strings_line_tokens[0]: cookies
strings_line_tokens[2]: FOOBAR
没有正确的方法来打印空值。我只想添加一个else子句来打印我想要的内容,例如字符串null
:
for(i = 0; i < 3; i++)
printf("strings_line_tokens[%d]: %s\n", i, strings_line_tokens[i] == 0 ? "null": strings_line_tokens[i]);
或(如果你喜欢常规if
而不是三元if:
for(i = 0; i < 3; i++)
if (strings_line_tokens[i] == 0) {
printf("strings_line_tokens[%d]: %s\n", i, "null");
} else {
printf("strings_line_tokens[%d]: %s\n", i, strings_line_tokens[i]);
}
新输出:
strings_line_tokens[0]: cookies
strings_line_tokens[1]: null
strings_line_tokens[2]: FOOBAR