C函数参数char*vs char []

Ani*_*amy 4 c arguments function

我认为这个问题是这个SO答案的延伸.说我有以下代码:

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

void func(char *str)
{
    strcpy(str, "Test");
}

int main()
{
    char testStr[20] = "Original";
    func(testStr);
    printf("%s\n", testStr);  /* Prints "Test" followed by a new-line */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,不应该func期望指向只读文字的指针作为参数?然而,传递的是只读文字堆栈上的副本.

即使这会产生正确的结果,这样做是否100%正确?难道提高代码的可读性,如果func()接受char [],而不是char *

NPE*_*NPE 6

你的理解是正确的.代码很好.

另一方面,以下不是:

void func(char *str)
{
    strcpy(str, "Test");
}

int main()
{
    char* testStr = "Original";
    func(testStr);
}
Run Code Online (Sandbox Code Playgroud)

这会尝试修改字符串文字,从而导致未定义的行为.

至于可读性问题,这是主观的.