Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字符数组填充_C_File Io - Fatal编程技术网

C 字符数组填充

C 字符数组填充,c,file-io,C,File Io,我想声明字符数组,稍后再填充它。但是得到错误: char line[BUFSIZE+1]; strcpy(line,"Memory is Full", sizeof(line)); 错误是: wrong number of arguments in call to strcpy. 是否有其他方法可以实现此目的?strcpy不接受大小/长度参数。改为使用memcpy,但给它指定要复制的字符串的大小(长度+1),而不是缓冲区的大小,否则可能会出现未定义的行为/segfults。strcpy不接

我想声明字符数组,稍后再填充它。但是得到错误:

char line[BUFSIZE+1];
strcpy(line,"Memory is Full", sizeof(line));
错误是:

wrong number of arguments in call to strcpy. 

是否有其他方法可以实现此目的?

strcpy不接受大小/长度参数。改为使用
memcpy
,但给它指定要复制的字符串的大小(长度+1),而不是缓冲区的大小,否则可能会出现未定义的行为/segfults。

strcpy
不接受大小/长度参数。改为使用
memcpy
,但给它指定要复制的字符串的大小(长度+1),而不是缓冲区的大小,否则可能会出现未定义的行为/segfults。

strcpy()
接受2个参数,
strncpy()
接受3个参数

我认为您正在考虑使用,这需要目的地、来源和大小

即:

注意:如果完全填充了char[],您必须自己附加
'\0'
,否则
strncpy()
将为您完成此操作(如我的示例所示)。

strcpy()
需要2个参数,
strncpy()
需要3个参数

我认为您正在考虑使用,这需要目的地、来源和大小

即:


注意:如果完全填充字符[],则必须自己附加
'\0'
,否则
strncpy()
将为您完成此操作(如我的示例所示)。

如果您拥有它,请使用
strlcpy()
。它执行您可能期望的
strncpy()
操作


如果做不到这一点,我建议您使用
snprintf()
,如果您有它。

如果您有它,请使用
strlcpy()
。它执行您可能期望的
strncpy()
操作


如果做不到这一点,我建议您使用
snprintf()

但是strncpy是一个有问题的、奇怪的函数。我不会建议任何人使用它,memcpy()是一个更安全、更快的函数。@Lundin strncpy有什么问题?@simonc Google的“strncpy问题”、“不要使用strncpy”、“strncpy seg fault”或在本网站上找到任何关于它的争论。昨天有一个..@Mike除了在标准中,其他地方都很清楚:
如果s2指向的数组是一个短于n个字符的字符串,则s1指向的数组中的副本将附加空字符,直到总共写入了n个字符。
他们忘记添加:如果s2>=n个字符长的数组,strncpy将导致程序崩溃和烧坏。@simonc:see(实际上是关于
strlcpy
,但也讨论了
strncpy
),但是strncpy是一个有问题的、奇怪的函数。我不会建议任何人使用它,memcpy()是一个更安全、更快的函数。@Lundin strncpy有什么问题?@simonc Google的“strncpy问题”、“不要使用strncpy”、“strncpy seg fault”或在本网站上找到任何关于它的争论。昨天有一个..@Mike除了在标准中,其他地方都很清楚:
如果s2指向的数组是一个短于n个字符的字符串,则s1指向的数组中的副本将附加空字符,直到总共写了n个字符。
他们忘记添加:如果s2>=n个字符长的数组,strncpy将导致程序崩溃和烧毁。@simonc:see(实际上是关于
strlcpy
,但也讨论了
strncpy
)+1表示
snprintf
strlcpy
,但后者仅在BSD C库(以及Solaris、IIRC或WAST AIX)中可用。+1用于
snprintf
strlcpy
,但后者仅在BSD C库(以及Solaris、IIRC或WAST AIX)中可用。
int main()
{
    char i[6];
    strncpy(i, "Hello", sizeof(i));
    printf("%s\n", i);    
    return 0;
}

>> ./a.out
>> Hello