我有一个 char 数组,其中放置了来自命令行的用户输入。我想将该数组传递给函数 foo
并将其内容复制到大小与原始数组中包含的内容。然而我收到了这个警告。我哪里出错了?
char inputBuffer[500];
void foo(char *inputBuffer)
{
char readBuffer[sizeof(inputBuffer)];
strncpy(readBuffer, inputBuffer, sizeof(inputBuffer));
}
warning: argument to 'sizeof' in '__builtin_strncpy' call is the same expression as the source, did you mean to provide an explicit length
最佳答案
在函数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
的大小包含一个用于终止空字节的额外字节。
关于c - 将 char 数组传递给函数并将内容复制到另一个 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51290223/