strcpy时出现Seg错误

时间:2014-03-19 20:47:51

标签: c

这是我正在处理的相关代码。我没有问题地标记了stdin的输入,当我去复制那个输入时,我得到了一个段错误。但是,我没有“strcpy(s,input)”的段错误。我错过了一些基本的东西吗?谢谢

char *s = malloc(64 * sizeof(char));
char *token = malloc(64 * sizeof(char));
char *currstring = malloc(128 * sizeof(char));
currstring = NULL;
fgets(input,100, stdin);
strcpy(s, input);
token = strtok(s,delim);

while (token) 
{
    //Condition checking      
     strcpy(currstring,token);
}

1 个答案:

答案 0 :(得分:4)

char *currstring = malloc(128 * sizeof(char));
currstring = NULL;

您分配内存,但随后您立即将其丢弃并将指针设置为NULL。摆脱第二行。

如果您尝试将其设置为空字符串(""),请执行以下操作:

currstring[0] = '\0';
// or
strcpy(currstring, "");
但是,这可能并非必要。如果您稍后要""进行strcpy(),则不需要将字符串设置为char *token = malloc(64 * sizeof(char));

<击>

<击>
token

<击>

您也不需要为strtok()分配内存。 token会导致s指向token内的某个位置,因此为token = strtok(s, delim);分配内存只会在执行{{1}}后泄漏内存。