我有一个声明为:
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)
你声明一个像这样的字符数组:
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,它将继续输出超过数组的末尾.
您的数组未初始化,并且您还有一个指针数组,而不是一个字符数组。char* array = (char*)malloc(sizeof(char)*size);如果你想要一个字符数组,它应该是。现在您有一个指向数组第一个元素的指针。