我有一个字符串文字char * tmp =“xxxx”; 我想将字符串文字复制到数组中。
例如: 现在我如何将tmp复制到char数组[50];
以及如何将一个字符串文字复制到另一个?
答案 0 :(得分:8)
根据您的具体需要,使用strcpy()
,strncpy()
,strlcpy()
或memcpy()
。
使用以下变量:
const char *tmp = "xxxx";
char buffer[50];
您通常需要确保复制后字符串将以空值终止:
memset(buffer, 0, sizeof buffer);
strncpy(buffer, tmp, sizeof buffer - 1);
另一种方法:
strncpy(buffer, tmp, sizeof buffer);
buffer[sizeof buffer - 1] = '\0';
某些系统还提供正确处理NUL字节的strlcpy()
:
strlcpy(buffer, tmp, sizeof buffer);
您可以按照以下方式天真地实施strlcpy()
:
size_t strlcpy(char *dest, const char *src, size_t n)
{
size_t len = strlen(src);
if (len < n)
memcpy(dest, src, len + 1);
else {
memcpy(dest, src, n - 1);
dest[n - 1] = '\0';
}
return len;
}
上述代码也可作为memcpy()
的一个示例。
最后,当你已经知道字符串适合时:
strcpy(buffer, tmp);
答案 1 :(得分:2)
使用strcpy
,它有很好的文档记录,很容易找到:
const char* tmp = "xxxx";
// ...
char array[50];
// ...
strcpy(array, tmp);
但是,当然,您必须确保要复制的字符串的长度小于数组的大小。另一种方法是使用strncpy
,它给出了被复制字节的上限。这是另一个例子:
const char* tmp = "xxxx";
char array[50];
// ...
array[49] = '\0';
strncpy(array, tmp, 49); // copy a maximum of 49 characters
如果字符串大于49,则数组仍将具有格式良好的字符串,因为它以空值终止。当然,它只有阵列的前49个字符。
答案 2 :(得分:0)
// For Microsoft Visual C++:
char dst[40];
strcpy_s(dst, sizeof(dst), "A String Literal");
// if you are not using Microsoft Visual C++:
#ifndef _MSC_VER
int strcpy_s(char* dst, int dst_len, const char* src) {
int i;
if (dst == 0)
return 0;
if (dst_len == 0)
return 0;
if (src == 0) {
dst[0] = 0;
return 0;
}
for (i=0; i < src_len-1; i++) {
if (src[i] == 0) {
break;
}
src[i] = dst[i];
}
src[i] = 0;
return i;
}
#endif
答案 3 :(得分:0)
你也可以这样做:
char dst [40];
snprintf(dst,sizeof(dst),&#34;%s&#34;,&#34; string literal&#34;);