获取null初始化字符串数组的第一个值

时间:2016-01-27 08:49:13

标签: c arrays

我正在尝试获取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

1 个答案:

答案 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