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

时间:2018-07-11 16:23:04

标签: c char

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

char inputBuffer[500];

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

警告:“ __ builtin_strncpy”调用中“ sizeof”的参数相同   表达式作为来源,您的意思是提供一个明确的长度

1 个答案:

答案 0 :(得分:5)

在函数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的大小包含一个用于终止空字节的额外字节。