Strncpy和char **

时间:2014-04-10 19:44:15

标签: c strncpy

以下代码不会将匹配项2的内容复制到keys [0]。 为什么会这样?

char **keys;
char matches[2000];
char *matches2;
matches2 =strtok(matches," ");
strncpy(keys[0],matches2, sizeof keys[0]);

2 个答案:

答案 0 :(得分:1)

您忘记为keys指定空间以及keys[#]指向的空间。
另外,您确定要使用strncpy吗?它不保证0终止,而是复制ggiven字符串的最多n个字节,并填充其余的缓冲区。

字符串的大小是包含0-terminator的元素数:strlen(s)+1

要创建字符串的副本,您可以查看非标准strdup,这是一种可能的实现:

char* strdup(const char* s) {
    size_t n = strlen(s)+1;
    char* r = malloc(n);
    if(r)
        memcpy(r, s, n);
    return r;
}

答案 1 :(得分:0)

假设您已为键[0]

分配了空间,请尝试此操作
strncpy(keys[0], matches2, /*your desired size*/);

strcpy(keys[0], matches2);