以下代码不会将匹配项2的内容复制到key[0]。为什么会这样?
char **keys;
char matches[2000];
char *matches2;
matches2 =strtok(matches," ");
strncpy(keys[0],matches2, sizeof keys[0]);
您忘记为keys
和keys[#]
分配空间。
此外,您真的确定要使用strncpy
吗?它不保证0终止,而是复制最多n个字节的ggiven字符串,0填充缓冲区的其余部分。
字符串的大小是包含0终止符的元素数: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;
}
假设您已经为密钥[0]分配了空间,请尝试此操作
strncpy(keys[0], matches2, /*your desired size*/);
或
strcpy(keys[0], matches2);