gpt4 book ai didi

c - 将 token 从数组传递到 strcmp

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:16 26 4
gpt4 key购买 nike

我想做的是将用户输入分成以空格作为分隔符的部分,将这些部分复制到数组 (tokenAr) 中并比较 tokenAr[0](第一部分)如果它等于 sHistory。如果相等,则检查tokenAr[1]的值是否为“1”、“2”等,执行相应的输入到history中的命令大批。这是我尝试过的,但它崩溃了。我在 Windows x64 上使用 TCC。编辑:我忘了说我两天前才开始学习 C。

EDIT2:我在调试器中运行程序,它在 if(strcmp(tokenArPtr[0],sHistory)==0) 行中引发了 Acces Violation(Segmentation Fault)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
int i=1; int j=1; int k=0;
char history[100][100] = {0};
char sKey[] = "exit";
char sInput[100];
char sHistory[]="history";

do
{
//gather user input
printf ("hshell> ");
fgets (sInput, 100, stdin);
strcpy(history[i],sInput);
i++;
//END_gather user input

//Tokenizing

char delims[] = " ";
char *tokenArPtr[5];
char *result = NULL;

result = strtok(sInput, delims);
tokenArPtr[0] = result;

while (result!=NULL)
{
puts(result);
result= strtok(NULL, delims);
tokenArPtr[k+1] = result;

puts(tokenArPtr[k]);
puts("=====");
k++;
}
k=0;
/*
//END_Tokenizing

if(strcmp(tokenArPtr[0],sHistory)==0)
{
for(j=1;j<i;j++)
{
printf("%d. %s \n",j,history[j]);
}
}

else if (strcmp (sKey,tokenArPtr[0]) != 0)
{
printf("\nCommand not found \n");
}*/
}while (strcmp (sKey,sInput) != 0);
return 0;
}

编辑 3:我直接使用了 result 变量而不是 tokenArPtr,但是在调试时,我注意到数组的值没有被更新。

最佳答案

strtok 返回什么类型? 字符 *。 tokenAr[k] 的类型是什么? 字符。 strcmp 期望什么类型作为输入? char *char *。 tokenAr[0] 的类型是什么? 字符.

看到问题了吗?你应该。 * 非常重要。

假设 tokenAr 声明为 char *tokenAr[2];,tokenAr 可以存储多少个 char * 值?当 k 超过 2 时会发生什么?您需要确保不会溢出 tokenAr 数组。

history 未初始化。使用未初始化的变量是未定义的行为。我建议初始化它,像这样:char history[100][100] = { 0 };

你在读什么书?

关于c - 将 token 从数组传递到 strcmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953492/

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