我希望能够让用户输入他们想要做的事情.还有其他选择,但现在我正在研究"插入".另外两个选项是"搜索"和"删除".
int main() {
char *input = malloc(sizeof(char) * 6);
printf("%s", "WELCOME TO USER'S SKIP LIST!\n\nWhat do you wish to do? ");
scanf("%6s", input);
if (strcmp(input, "insert") == 0) {
printf("%s", "What is the item? ");
input = realloc(input, (size_t)scanf("%s", input));
}
}
Run Code Online (Sandbox Code Playgroud)
我最初分配足够的内存,input有6个字符.这是因为其他两个选项也只有6个字符.进入后,他们insert必须输入一个具有任意数量字符的项目,因此我想input根据他们为项目输入的内容重新分配内存.因此,如果他们进入Nintendo Switch,将重新分配15个字符.我的执行realloc()方式是否正确?
我想你主要问的是:
Run Code Online (Sandbox Code Playgroud)input = realloc(input, (size_t)scanf("%s", input));
不,这不是一个正确的使用的realloc().仅此一行至少有四个明显的问题,包括:
scanf()返回成功扫描和记录的输入项数,或者EOF是否发生错误."输入项"对应于字段指令,例如您的%s,因此特定scanf()调用永远不会返回大于1的值.但是,它可能返回0或EOF(通常为-1).
即使scanf()确实返回了读取的字符数,
任何重新分配都为时已晚.数据存储在提供的空间中scanf(),如果空间不够大,则在重新分配任何机会之前,其边界将超出.
没有为字符串终止符保留空格.
realloc()可能会失败,在这种情况下它会返回NULL.即使您通过检查input后检查realloc(),您将不再有指向原始空间的指针,因此它会泄漏.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |