无法将字符串复制到 C 中的字符串数组

标签 c arrays string printf

我正在尝试遍历我的链表并将每个节点字段组合成一个字符串,然后将该字符串添加到一个字符串数组中。

void listToArray(){
   //create array of strings
    char *list[numNodes];
    int i = 0, n;

  while(head != NULL){
    // add string to array
    printf("[%d] %s %s:%d\n ", i, head->fileName, head->ip, head->port);
    n = sprintf(list[i], "[%d] %s %s:%d\n", i, head->fileName, head->ip, head->port);
    head = head->next;
    printf("%s\n", list[i]);
    i++;

 }

printf 语句工作正常,这表明导致问题的不是节点的字段,而是当我执行 sprintf 语句将字符串复制到数组的索引中时。我遇到段错误。

最佳答案

你只声明

char *list[numNodes];

但不为它们分配内存。在使用 list[i] 之前,使用 malloc 分配内存。要了解从 sprintf 生成的字符串的大小,请使用 snprintf。谢谢user3121023为我们找到这个功能。

void listToArray(){
   //create array of strings
    char *list[numNodes];
    int i = 0, n;

  while(head != NULL){
    printf("[%d] %s %s:%d\n ", i, head->fileName, head->ip, head->port);

    n = snprintf(NULL, 0, "[%d] %s %s:%d\n", i, head->fileName, head->ip, head->port);
    list[i] = malloc((n+1)*sizeof(char));

    n = sprintf(list[i], "[%d] %s %s:%d\n", i, head->fileName, head->ip, head->port);
    head = head->next;
    printf("%s\n", list[i]);
    i++;

 }

关于无法将字符串复制到 C 中的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003196/

相关文章:

将带有某人姓名的字符串转换为首字母缩写?

string - 如何检测字符串是否为空字符?

c - sprintf 原始字节到 C 中的字符串?

python - cython 中 str 和 Py_UNICODE 的驻留和内存地址

C++ 错误 : Conversion to Execution Character set

c - 多个字符数组的输入不起作用

c - 字符串没有填充随机字符(C)?

c - c 中处理 scanf 的段错误

java - 按 Integer 属性对列表进行排序时,无法取消引用 int

php - 如何在 MySQL 中获取印地语和古吉拉特语的数据?