c - 字符数组索引问题

标签 c arrays string

动机

所以我读过很多内容,在 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 循环打印单个字符时,一些涉及平方根、笑脸和来自某种语言的一些字符的无意义事务我什至不记得被打印出来了。

所以我的推论:

我的不是单个字符的数组。因为如果是的话我应该能够通过它建立索引并看到它们。

我的问题

  1. 我的 line 变量实际上发生了什么
  2. 如何对字符串的各个字符进行索引?

假设我想写(如果第 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

Ideone link

关于c - 字符数组索引问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30068554/

相关文章:

c# - 使用c#将一个字节数组插入到另一个字节数组的特定位置

php - 解析短语和关键字的搜索字符串

c++ - 将 std 字符串访问器与 ostream 运算符 << 一起使用

c# - c# 两台电脑之间的通信

c - 递归级别受限的斐波那契线程

javascript - 使用正则表达式将 JS 中的大字符串文字解析为对象数组

javascript - 通过使用某些值得的小表的 javascript 数组来支持它来降低查询的复杂性

c - 系统调用的参数

c - 两个字符串文字的串联如何工作?

python - 从字符串末尾分割字符串中的 3 个空格分隔的值?