我用 C 写了一段代码,它发送一个指向函数的指针来打印它,但是有一个时间 运行 错误

I wrote a code in C that send a pointer to function to print it, but there is a time running error

这是代码: 代码需要将数组发送到函数,函数将打印但似乎存在 运行 时间错误

#include <stdio.h>
#include <string.h>

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

int main(void)
{
    char* msg = "hi jyegq meet me at 2 :)"; 
    printArray(msg, strlen(msg));
    getchar();
    return 0;
}
for (p; p < p + len; p++)

此条件始终为 true,因为您不修改 lenpp 相同,即使在突变。您需要定义一个初始等于 p 的新指针 q 并且仅变异 q.

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

最好定义 char const* p,因为没有理由改变 p

在这个for循环中

for (p; p < p + len; p++)

条件总是计算为逻辑 true(除非 len 等于 0 或具有调用未定义行为的负值)因为 p明显小于p + len.

函数可以通过以下方式声明和定义

void printArray( const char *s, size_t len )
{
    for ( const char *p = s; p < s + len; p++)
    {
        putchar( *p );
    }
    putchar( '\n' );
}

注意指针参数应该有限定符const,因为指向的字符串在函数内没有改变,第二个参数的类型应该是size_t。它是函数 strlen.

的 return 类型