这是我正在处理的相关代码。我没有问题地标记了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);
}
答案 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}}后泄漏内存。