[英]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.