【问题标题】:Copy a string into 2D array of strings将字符串复制到二维字符串数组中
【发布时间】:2015-11-29 10:47:50
【问题描述】:

我有一个标记文件内容的 c 代码。我想将每个标记复制/分配给一个临时变量以将其放入列表中。我的 temp 被声明为 char *temp[MAX]。 这是我的代码,但 strcpy(temp[k], token) 有问题。当我运行我的代码时,它会强制关闭我的程序。但是,当我删除 strcpy 行/语句时,它会正确运行并且不会强制关闭。但是我将令牌复制到 temp 的目标不会完成。有人可以知道为什么会这样吗?谢谢。

临时声明是全局的:char *temp[MAX];

void tokenize(FILE *input){

char *token;
int k=0;

char word[1000];
while(!feof(input)){
    fgets(word,1000,input);
    token = strtok(word, " \t\n");
        while(token!=NULL){             
            printf("%s\n",token);
            strcpy(temp[k], token);
            k++;
            token= strtok(NULL, " \t\n");
        }
}
printf("%s", temp[0]);
}

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
  • 在从token复制之前,您需要为temp[k]分配空间。
  • 如何为 temp[k] 分配空间?无论如何,如果我删除 strcpy 行,程序将正常运行,但是,我将令牌复制到 temp 的目标将失败。
  • 例如temp[k] = malloc(strlen(token)+1); strcpy(temp[k], token);

标签: c string strcpy


【解决方案1】:

您需要先为 temp 分配空间,然后才能使用它。是你做的吗?

temp[k] = (char *) malloc(strlen(token)+1);

在将值分配给 temp[k] 之前,将此行添加到您的代码中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2019-09-14
    • 2010-10-16
    • 1970-01-01
    • 2019-06-10
    相关资源
    最近更新 更多