动机
所以我读过很多内容,在 C 字符串中只是 char 数组,而 char 数组只是 char 指针。
我猜我读到的内容要么是错误的,要么是我误解了。我的问题是我似乎无法逐个字符索引字符串。考虑下面的代码片段
/* initializations */
char line[1000];
int i;
/* reading file */
fgets(line,1000,file);
/* the weird business */
printf("%s\n", line);
i = 0;
while(i < sizeof(line)/sizeof(char))
{
printf("%c",line[i]);
i++;
}
printf("\n");
此代码片段成功从文件中读取字符串,然后成功打印该字符串。但是,当我尝试用 while 循环打印单个字符时,一些涉及平方根、笑脸和来自某种语言的一些字符的无意义事务我什至不记得被打印出来了。
所以我的推论:
我的行
不是单个字符的数组。因为如果是的话我应该能够通过它建立索引并看到它们。
我的问题
- 我的
line
变量实际上发生了什么 - 如何对字符串的各个字符进行索引?
假设我想写(如果第 7 个字符 = 'h'
print 19)或其他内容。如果不通过数组索引,如何对字符串进行逐个字符的访问?
最佳答案
您需要增加 i
才能获取下一个字符:
while(i < sizeof(line)/sizeof(char))
{
printf("%c",line[i]);
i++; // <-- add this
}
此外,line[i]
是逐字符处理字符串的正确方法。因此,如果您想访问,例如第四个字符,请使用 line[3]
(因为它是基于 0 的索引)。
另外,另一个建议:字符串长度可能小于行的长度。因此,请改用 strlen
遍历直到字符串末尾。
int len = strlen(line);
while(i < len)
{
printf("%c",line[i]);
i++; // <-- add this
}
sizeof(char)
不是必需的,因为它通常是 1
。
关于c - 字符数组索引问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30068554/