我有一个char数组,在其中放置了来自命令行的用户输入。我想将该数组传递给foo
函数,并将其内容复制到与原始数组中包含的内容大小相似的char数组中。我收到此警告。我要去哪里错了?
char inputBuffer[500];
void foo(char *inputBuffer)
{
char readBuffer[sizeof(inputBuffer)];
strncpy(readBuffer, inputBuffer, sizeof(inputBuffer));
}
最佳答案
在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
的大小包含一个用于终止空字节的额外字节。