gpt4 book ai didi

c - strcmp : fields within lines

转载 作者:行者123 更新时间:2023-11-30 15:52:58 25 4
gpt4 key购买 nike

我正在编写一个 strcmp 版本,它可以选择仅根据空格和字母数字字符(目录顺序)比较字符串,也可以选择忽略大小写区分(Kernighan 和 Ritchie 第 121 页 5- 16)。所以我想出了以下几点:

int strcmpdf (char* s, char* t)
{
char a[100];
char b[100];
int i;
int j;
i = j = 0;
if (directory){ /*compares strings solely on the basis of alphanumeric/space characters*/
for ( ; *s != '\0'; s++)
if (isalnum(*s) || isspace (*s) || *s == '\t' || *s == '\n')
a[i++] = (fold && islower(*s))? toupper(*s) : *s;
a[i] = '\0';
for ( ; *t != '\0'; t++)
if (isalnum(*t) || isspace (*t) || *t == '\t' || *t == '\n')
b[j++] = (fold && islower(*t))? toupper(*t) : *t;
b[j] = '\0';
return strcmp(a,b);
}else if (fold && !directory){/*folds upper and lower cases together*/
for ( ; toupper(*s) == toupper(*t); s++,t++)
if (*s == '\0')
return 0;
return toupper(*s) - toupper(*t);
}else
return strcmp(s,t);
}

这工作正常并回答了问题,但是当我开始使用字符指针而不是数组时,问题就开始了。当我初始化 char* a 和 char* b,而不是数组 a 和 b,并在第 11 行和第 12 行将 a[i++] 替换为 *a++,在第 15 行和第 16 行将 b[j++] 替换为 *b++ 时,我得到段错误。当 a+i 是 a[i] 的地址时,为什么会出现此错误?

最佳答案

当您声明一个数组(例如“char a[100]”)时,它会在堆栈上分配 100 个字符(字节),并且“a”指向第一个字符。

当您声明“char *a”等指针时,它最初并不指向任何有效的内容。在引用有效的内容之前,您不能将任何内容分配给“*a”。

你可以做的是:

char aa[100];
char *a = aa;

*a = '\0';

(我自己在开始学习C时也犯过类似的错误,并且也出现了段错误)。

关于c - strcmp : fields within lines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13987627/

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