gpt4 book ai didi

c - 标记化来自 getline 的输入

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:13 25 4
gpt4 key购买 nike

我正在尝试使用 getline() 从键盘获取输入,将其存储在一个字符串中,将其标记化,然后打印标记。当我运行它时,我在最后一次迭代(处理输入中最后一个标记的迭代)中遇到了段错误。

#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

////////////////////////
// Main Method //
////////////////////////
void main() {
system("clear");
int ShInUse = 1; // Represents if shell is in use

char curpath[1024]; // holds current path to print with prompt
char *UserCommand = NULL;
size_t combytes = 100;
UserCommand = (char *) malloc(combytes);
char *tok;

// Main loop that shell uses //
while (ShInUse == 1) {
getcwd(curpath, sizeof(curpath)); // Store initial working dir
printf("gash:%s>", curpath); // print prompt

getline(&UserCommand, &combytes, stdin);
tok = strtok(UserCommand, " \n"); // Tokenize input
if (tok == NULL ) {
printf("Enter a command.\n");
} else {
// Exit command //
if (strcmp(tok, "exit") == 0) {
ShInUse = 0;
} else {
while (tok != NULL ) {
printf("You entered a command.\n");
printf("tok: %s\n", tok);
tok = strtok(NULL, " \n");
}
}
}
}
free(UserCommand);
}

关于可能导致此问题的任何想法?目前调试不是我的选择。

最佳答案

我用这个测试了你的代码:

#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char *UserCommand = NULL;
size_t combytes = 100;
UserCommand = (char *) malloc(combytes);
char *tok;
while(getline(&UserCommand, &combytes, stdin) != EOF)
{
tok = strtok(UserCommand, " \n"); // Tokenize input
if (tok != NULL) {
while(tok != NULL) {
printf("%s\n", tok);
tok = strtok(NULL, " \n");
}
}
}
return 0;
}

它对我所做的所有测试都运行良好——包括将源文件作为输入传递、编写很长的行等等。

所以我的结论是,您的代码中可能还有其他一些段错误。

关于c - 标记化来自 getline 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com