C编程打印字符数组

ilo*_*arn 5 c cstring

我有一个声明为:

char *array[size];
Run Code Online (Sandbox Code Playgroud)

当我表演时

printf("%s", array);
Run Code Online (Sandbox Code Playgroud)

它给了我一些垃圾字符,为什么会这样呢?

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

这个url表示printf的格式为:`int printf(const char*format,...);

#include <stdio.h>
#include <string.h>
#define size 20
#define buff 100
char line[buff];

int main ()
{
    char *array[100];
    char *sep = " \t\n";

    fgets(line, buff, stdin);

    int i;

    array[0] = strtok(line, sep);

    for (i = 1; i < size; i++) {
        array[i] = strtok(NULL, sep);

        if (array[i] == NULL)
            break;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Seb*_*olm 6

你声明一个像这样的字符数组:

char foo[size];
Run Code Online (Sandbox Code Playgroud)

你似乎把它混淆了char *,这是一个指向角色的指针.你可以说

char *bar = foo;
Run Code Online (Sandbox Code Playgroud)

这将bar指出的内容foo.(或者,实际上,到第一个角色foo.)

要打印数组的内容,您可以执行以下操作之一:

// either print directly from foo:
printf("%s", foo);
// or print through bar:
printf("%s", bar);
Run Code Online (Sandbox Code Playgroud)

但请注意,C不执行变量内容的初始化,因此除非您专门将内容设置为某些内容,否则您将获得垃圾.另外,如果那个垃圾没有碰巧包含一个\0; 也就是说,值为0的char,它将继续输出超过数组的末尾.


Ton*_*ion 4

您的数组未初始化,并且您还有一个指针数组,而不是一个字符数组。char* array = (char*)malloc(sizeof(char)*size);如果你想要一个字符数组,它应该是。现在您有一个指向数组第一个元素的指针。

  • `new` 不是 `C` 中的运算符 (4认同)