初始化从整数创建指针而没有强制转换

时间:2016-10-22 20:09:00

标签: c

我的程序旨在制作名词的复数。错误来自第"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;
}

2 个答案:

答案 0 :(得分:1)

您有两个错误:

  • 导致问题的原因是userin userNoun [lengthStr-1]表达式缺少地址
  • 第二个问题是&#34; es&#34;数组:在[&#34; es&#34;之后,一个[2]太小而不适合空终止符,所以你最终会得到未定义的行为

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

答案 1 :(得分:0)

您在问题上指出的错误意味着您尝试初始化指针变量char *pstr,其值为userNoun[lengthStr - 1],这是char值(而非char 1}}指针)

编译器消息可能听起来有点不精确,但确实如此。 char值取为数字,目标类型不是。