-5

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

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

2 回答 2

1

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

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

要创建字符串的副本,您可能会查看 non-standard strdup,一种可能的实现:

char* strdup(const char* s) {
    size_t n = strlen(s)+1;
    char* r = malloc(n);
    if(r)
        memcpy(r, s, n);
    return r;
}
于 2014-04-10T19:51:18.677 回答
0

假设您已经为键 [0] 分配了空间,请尝试此操作

strncpy(keys[0], matches2, /*your desired size*/);

或者

strcpy(keys[0], matches2);
于 2014-04-10T19:50:31.273 回答