c-将char数组传递给函数,并将内容复制到另一个char数组



我有一个char数组,其中放置了来自命令行的用户输入。我想将该数组传递给函数foo,并将其内容复制到原始数组中包含的内容大小的类似char数组中。然而,我收到了这个警告。我哪里错了?

char inputBuffer[500];
void foo(char *inputBuffer)
{
char readBuffer[sizeof(inputBuffer)];
strncpy(readBuffer, inputBuffer, sizeof(inputBuffer));
}

警告:'__builtin_strncpy'调用中'sizeof'的参数相同表达式作为源,你的意思是提供一个显式长度吗

在函数foo中,inputBuffer是指向char的指针,而不是数组。数组和指针不一样。其中一个显而易见的地方是sizeof运算符。

如果你在指针上使用sizeof运算符,它会给你一个指针的大小(很可能是4或8(,而不是它所指向的大小。

还要注意,函数参数inputBuffer屏蔽了同名的全局变量。

假设inputBuffer包含用户输入并且可能是一个字符串,那么您需要使用strlen来获取字符串的长度。

void foo(char *inputBuffer)
{
char readBuffer[strlen(inputBuffer) + 1];
strcpy(readBuffer, inputBuffer);
// do something with readBuffer
}

还要注意,给定给readBuffer的大小包含一个用于终止空字节的额外字节。

最新更新