【问题标题】:Spliting string and storing in array or pointer in C拆分字符串并存储在C中的数组或指针中
【发布时间】:2020-12-31 18:58:16
【问题描述】:

我正在做一个小项目,我有一些名称存储在一个结构中(例如:Name1,Name2),我需要拆分每个名称并将其存储在一个数组中,这样我就可以分别调用每个名称(printf ("%s", vet[1]) 应该只打印 "Name2")。

这是我的代码:

int main(){

    char temp[100];
    LIGA *vetLiga;
    int reference;
    int quantiy;


    separarEquipas(vetLiga, temp, reference, quantity);
}

int separarEquipas(LIGA *p, char vet[100], int vPesquisa, int n){
    
    int i, nr, a;
    char *ptr;
    char *str;
    
    for(i=0;i<n;i++){
        
        if (p->id == vPesquisa){
                nr = p->nrEquipas;
                strcpy(str, p[i].eqLiga);
                ptr = strtok(str, " ,"); 
                
                while(ptr != NULL) 
                {
                    vet[a++] = ptr; //here I'm trying to store each word in a position of the array
                    ptr = strtok(NULL, " ,");
                }
        }
        p++;
    }
    
    return nr;
}

问题在于我尝试将每个令牌存储在数组中但它不断使终端崩溃。我尝试了不同的方式,例如使用 strcpy 和 memcpy,正如其他帖子所建议的那样,但没有:(。

我在尝试寻找解决方案时遇到的一些错误:

[Warning] 赋值从指针中生成整数而不进行强制转换; [警告] 传递 'strcpy' 的参数 1 使指针从整数而不进行强制转换。

希望你能帮助我, 谢谢!

【问题讨论】:

  • 这可能是因为p[i].eqLiga不是指针类型,仔细检查LIGA类型
  • 您使用str 而不为其分配内存

标签: arrays c pointers storage strtok


【解决方案1】:

你没有发布完整的代码,所以从我看到的vetLiga separarEquipas 变成 p 是未初始化的。

另一个问题是您尝试在strcpy 中使用str 而不为其分配内存。你需要这样做

char *str = malloc( max_number_of_characters_in_str );

那么这里:

vet[a++] = ptr; //here I'm trying to store each word in a position of the array

您所做的正是您在评论中所说的。但是,您不能将单词存储到单个字符的空间中。 vet 需要是一个二维数组,或者如果你想要一个指向 char 的指针数组。

如果您需要进一步的帮助,请包含整个程序。

【讨论】:

    【解决方案2】:

    main 中,vetLiga 从未分配过值,但也许您将代码缩写了。

    separarEquipas 中,您有以下内容:

     char *str;
     strcpy(str, p[i].eqLiga)
    

    所以你正在将一个字符串复制到内存中的一个随机位置。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      相关资源
      最近更新 更多