【问题标题】:Splitting a string at a delimiter and storing substrings in char **array in C在分隔符处拆分字符串并将子字符串存储在 C 中的 char **array 中
【发布时间】:2014-12-20 11:51:58
【问题描述】:

我想编写一个函数,将用户在命令行中给出的字符串与第一次出现的逗号分开并放入一个数组中。

这是我尝试过的:

char**split_comma(const str *s) {
    char *s_copy = s;

    char *comma = strchr(s_copy, ",");

    char **array[2];
    *(array[0]) = strtok(s_copy, comma);
    *(array[1]) = strtok(NULL,comma);
return array;
}

这是主要功能:

int main(int argc, char **argv) {
   char **r = split_comma(argv[1]);
   printf("substring 1: %s, substring 2: %s\n", r[0],r[1]);
   return 0;
}

有人可以告诉我为什么这不起作用吗?

【问题讨论】:

  • 一个大问题是你的split_comma 函数没有返回任何东西
  • + 没有人为字符串指针数组和子字符串分配空间
  • + 此代码根本无法编译。
  • 我建议你启用警告然后修复它们。例如,对 gcc / clang 使用 -Wall -Wextra。
  • 我需要为子字符串和数组分配空间吗?

标签: c arrays substring


【解决方案1】:

您需要为 2 个目标字符缓冲区 first 和 second 分配足够的空间。

这是一个简单的解决方案,我们首先复制输入字符串s,然后找到逗号并将其替换为字符串终止符(0)。然后第一个字符串在 s 的开头,第二个字符串在 0 之后:

/* Caller must call free() on first */
void split_comma( char* s, char** first, char** second )
{
    char* comma;
    if(!s||!first||!second) return ;
    *first = strdup(s) ;
    comma=strchr(*first,',') ;
    if(comma) {
        *comma = 0 ;
        *second = comma + 1 ;
    } else *second = 0 ;
}

【讨论】:

    【解决方案2】:

    这是有效的。

    char **split_on_comma(const char *s) {
        char ** result;
        result = malloc(sizeof(char*)*2);
        result[0] = malloc(sizeof(char) *200);
        result[1] = malloc(sizeof(char) *200);
        char *position;
        position = strchr(s, ',');
        strcpy(result[1], position +1);
        strncpy(result[0], s, position -s);
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2018-05-05
      相关资源
      最近更新 更多