使用指针打印字母表的 C 函数

标签 c string pointers runtime-error alphabet

我有这个代码:

void printArray(char* p, int len)
{
    for( p ; p < p + len ; p++ )
    {
        printf("%c", *p);
    }
    printf("\n");
}

int main()
{
    char* abc = "abcdefghijklmnopqrstuvwxyz";
    printArray(abc, 26);
    return 0;
 }

这应该打印所有英文字母,但是存在运行时错误,我需要找出导致它的原因以及如何修复它。 我已经尝试了任何我想到的方法来修复它,但没有任何帮助,它只是打印了很多随机的东西。 我在这里先向您的帮助表示感谢。 P.S:这不是我写的代码,我只需要找到错误并修复它。

最佳答案

停止的条件

p < p + len

不会像 p++ 在循环的每次迭代中那样为 false。您最终访问无效的内存位置,这会导致未定义的行为,这就是导致运行时错误的原因。要修复它,请使用另一个变量

char *tmp=p+len;

并将条件更改为

p < tmp

另一种方法是在每次迭代中减少len。一旦 len 为零,就退出循环:

void printArray(char* p, int len)
{
    for( p ; len ; --len )
    {
        printf("%c", (*p)++);
    }
    printf("\n");
}

关于使用指针打印字母表的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326514/

相关文章:

c++ - C 或 C++ 是否有标准的正则表达式库?

为二维数组调用 free() 会产生 seg。过错

在 C/Arduino 中将 int 转换为二进制

arrays - 如何从 Swift 中的段落中获取一组单词?

c++ - 在特定条件下迭代文件夹的文件

c - 来自地址的函数原型(prototype)

c - 如何清除保存内存位置起始位置的指针变量,该变量需要从起始位置清除 20 个字节的数据

c++ - 使用 %u 读取签名的字符

c - 评估包含未初始化指针的条件 - IN,但它会崩溃吗?

Java:执行连接变量和文字的 StringBuilder.indexOf() 的开销