繁体   English   中英

char* 究竟定义了什么? 如果它定义了一个字符串数组,我如何输出单个元素?

[英]What does char* exactly define? If it define a string array, how do I output a single element?

int main()
{
int a = 0;
int BUFSIZE = 1000;
char *string1[20];
FILE *fp1 = fopen("input1.txt", "r");
if (fp1 == 0)
{
    fprintf(stderr, "Error while opening");
    return 0;
}
string1[a] = (char *)malloc(BUFSIZE);
while (fgets(string1[a], BUFSIZE, fp1)!=NULL)
{
    a++;
    string1[a] = (char *)malloc(BUFSIZE);
} 
printf("%c", string1[3]);
}

嗨,我得到了上面的代码,它从文本文件中读取一个字符串并将其存储在一个数组中。 现在我想输出数组 string1 的某个元素,但显然 printf 不起作用。 此外,char *string1[20] 究竟定义了什么? 跟指针有关系吗? 谢谢!

char *string1[20]

声明一个名为string1的数组,其中包含 20 个指向char指针 因此string1[3]是指向char的指针,而不是%c格式所需的char

由于string1[3]是 - 如果有的话 - 通过fgets填充,它包含一个以 0 结尾的字符串,因此您可以使用

printf("%s\n", string1[3]);

如果你想打印一个字符,你会使用

printf("%c\n", string1[3][4]);

例如。

char* string1[20];

定义一个指向char数组的指针,这不是您想要的。 你想要一个char数组。

如果像这样删除string1声明中的*

char string1[20];

它应该工作。

编辑:Daniel Fisher 是对的……它是一个指向 char 的指针数组。
然而,目前还不清楚,你试图做什么。
如果您只想将文件读入单个数组,您可以这样做:

int BUFSIZE = 1000;
char string[BUFSIZE];
FILE *fp1 = fopen("input1.txt", "r");
if ( fp1 == 0 )
{
    fprintf(stderr, "Error while opening");
    return 0;
}
fgets(string1, BUFSIZE, fp1);
printf("%s", string1); // print the whole file content
printf("%c", string1[3]); // print the fourth character

它与指针有关。

要打印string1的值,请使用运算符*处的值
基本上 string1 实际上并不包含它指向数据的任何内容。 所以你不想要 string1[20] 的值,你想要它的值

 printf("%c", *string1[19]);

应该做

char*定义了一个指向 char 的指针。

char string[20]定义了一个包含 20 个字符的数组。

char* string[5]定义了一个由 5 个 char* 或指向 char 的指针组成的数组。

例如,如果您有一个字符数组,并且想将其用作空终止字符串,则需要获取第一个元素的地址,如下所示:

char array[20];
char* pointer = &array[0];

所以在你的情况下, char* string[20]是一个 char 指针数组。

char *string[20]; 是一个指向“char”的指针数组,它可用于将字母存储为“字符串”数组。 我写了“字符串”,因为 C 没有与 C++ 不同的字符串数据类型,例如。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM