我有一个char数组,其中来自命令行的用户输入被放入.我想将该数组传递给函数foo并将其内容复制到原始数组中包含的内容大小的类似char数组.但是我收到了这个警告.我哪里错了?
char inputBuffer[500];
void foo(char *inputBuffer)
{
char readBuffer[sizeof(inputBuffer)];
strncpy(readBuffer, inputBuffer, sizeof(inputBuffer));
}
Run Code Online (Sandbox Code Playgroud)
警告:"__builtin_strncpy"调用中'sizeof'的参数与源表达式相同,是否意味着提供显式长度
在函数中foo,inputBuffer是指向char的指针,而不是数组.数组和指针不一样.其中一个显而易见的地方是sizeof运营商.
如果sizeof在指针上使用运算符,它将给出指针的大小(很可能是4或8),而不是它指向的大小.
另请注意,function参数会inputBuffer屏蔽同名的全局变量.
鉴于inputBuffer包含用户输入并且可能是一个字符串,您需要使用它strlen来获取字符串的长度.
void foo(char *inputBuffer)
{
char readBuffer[strlen(inputBuffer) + 1];
strcpy(readBuffer, inputBuffer);
// do something with readBuffer
}
Run Code Online (Sandbox Code Playgroud)
另请注意,给定的大小readBuffer包含终止空字节的额外字节.