将C中的字符串文字复制到字符数组中

时间:2014-09-14 22:27:28

标签: c string

我有一个字符串文字char * tmp =“xxxx”; 我想将字符串文字复制到数组中。

例如: 现在我如何将tmp复制到char数组[50];

以及如何将一个字符串文字复制到另一个?

4 个答案:

答案 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;);