c - Strncpy 和 char **

标签 c strncpy

以下代码不会将匹配项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/

相关文章:

c - 如何用C在Windows中分别获取用户和系统环境变量

c - 在C中使用命令行检测参数,然后打印出参数的第一个或第二个字符

c - 替换 C 字符字符串中的字符串(strreplace,无 sprintf)

C 链接库错误

android - 如何使用 Cydia Substrate 在 Android 中 Hook C/C++ 方法

c - 再次收集2 : ld returned 1 exit status

c - 如何在 C 中将一个字符串分成多个其他特定长度的字符串?

c - gcc-8 Wstringop-截断

c - strncpy() 段错误(再次)

C 编程 - 用字符串替换 int?