以下代码不会将匹配项2的内容复制到keys[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;
}
关于c - Strncpy 和 char **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22997597/