【问题标题】:How to properly iterate through a char pointer?如何正确遍历 char 指针?
【发布时间】:2021-04-20 04:58:24
【问题描述】:

我正在学习C,我有这个问题:

主要:

int main()
{
    char str[] = "abcdefg";
    countRange(str, 'e');

}

功能:

int countRange(char* str, char c1)
{
    char *t;
    for (t = str; *t != '\0'; t++)
    {
        if ((t >= c1))
        {
            printf(t);
        }
    }
}

在这种情况下,函数的目标是只打印“efg”,因为这些值大于或等于字符 e,但是最终什么都不会打印并且函数退出。有人可以帮我吗?谢谢

【问题讨论】:

  • 应该是if (*t >= c1)。你忘了取消引用t
  • 感谢您的帮助!这得到了打印: efgfgg ,知道为什么吗?
  • 是的,这就是我希望从您的代码中得到的输出,因为只要该字符串的第一个字符符合条件,您就会从位置 t 打印整个字符串。
  • printf(t) 是错误的,因为它需要一个字符串作为第一个参数,因此它将打印从 t 开始的整个字符串。将其更改为putchar(*t)
  • 当我编译你的代码时,我收到 2 个警告。您是否忽略了警告?如果是这样..不要!如果没有收到警告,则需要提高编译器警告级别

标签: c string pointers


【解决方案1】:

总结一下。您应该记住三件事。

  1. C 中的警告非常重要,请将其视为错误。
  2. 处理指针时,取消引用以比较元素。
  3. printf 系列函数与其他语言略有不同,见下文。
#include <stdio.h>

/**
  * Since the function returns nothing it returns `void`
  */
void countRange(char str[], char c1)
{
    char *t;
    for (t = str; *t != '\0'; t++)
    {
        if ((*t >= c1)) // *t refers to the char. using t would be the whole string
        {
            printf("%c", *t); // printf prints strings only
        }
    }
}

int main()
{
    char str[] = "abcdefg";
    countRange(str, 'e');
}

扩展函数签名,main 是唯一的例外。也就是说,return 语句或多或少是可选的。

另一方面,%c 只是告诉 printf 函数您正在将一个字符替换为该字符串,即*t

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2016-11-12
    • 2013-03-22
    • 1970-01-01
    • 2016-01-22
    • 2015-08-12
    相关资源
    最近更新 更多