gpt4 book ai didi

c - 初始化从整数创建指针而不进行强制转换

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

我的程序旨在生成名词的复数形式。该错误来自行 "char *pstr = userNoun[lengthStr - 1];" 。有人能告诉我我的错误是什么吗?

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

void pluralNoun(char userNoun[27]){
int lengthStr = 0;
const char caseOne[2] = "es";
const char caseTwo[2] = "s";
lengthStr = strlen(userNoun);
char *pstr = userNoun[lengthStr - 1];

if(strncmp(pstr - 1, "ch", 2) == 0){
strcat(userNoun, caseOne);
}
else if(strncmp(pstr - 1, "sh", 2) == 0){
strcat(userNoun, caseOne);
}
else if(*pstr == 's'){
strcat(userNoun, caseOne);
}
else if(*pstr == 'y'){
userNoun[lengthStr - 1] = 'i';
strcat(userNoun, caseOne);
}
else {
strcat(userNoun, caseTwo);
}
printf("The plural of your noun is %s\n", userNoun);
}

int main(void){
char userVar[25];

printf("Enter a noun no more than 25 characters in length in lower case letters:\n");
scanf("%s", userVar);
pluralNoun(userVar);

return 0;
}

最佳答案

您有两个错误:

  • 导致问题的原因是 userNoun[lengthStr-1] 表达式中缺少地址运算符
  • 第二个问题是“es”数组的大小:one[2] 太小,无法容纳“es”后面的空终止符,因此最终会出现未定义的行为

由于 strcat 不会重新分配,请确保缓冲区有足够的空间容纳附加后缀和 null 终止符。

关于c - 初始化从整数创建指针而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40196548/

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