gpt4 book ai didi

c - 如何修复类型参数与类型参数不兼容

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:57 25 4
gpt4 key购买 nike

我使用函数 isspace 在单词中搜索空格。问题是程序构建时我收到一条错误消息: “char* 类型的参数与 int 类型的参数不兼容”

    int const bufferSize = 256;

newItemIDPointer = (char*)malloc(bufferSize * sizeof(char));
if (newItemIDPointer == NULL)
{
printf("Didnt allocate memory!");
exit(EXIT_SUCCESS);
}

printf("Enter new Item ID: ");
scanf_s(" %[^'\n']s", newItemIDPointer, bufferSize);

stringLength = strlen(newItemIDPointer);
newItemIDPointer = (char*)realloc(newItemIDPointer, size_t(stringLength + 1));

int i = 0;
int count = 0;
while ((newItemIDPointer + i) != '\0')
{
if (isspace(newItemIDPointer + i))
{
count++;
}
i++;
}

我的代码中 isspace 的实现有什么问题,我该如何修复此错误消息?

最佳答案

这是因为您的表达式 newItemIDPointer + i 是指向字符串中偏移量 i 处的字符的指针,而不是该位置处的值(字符)。您需要取消引用指针以获取值,例如:

*(newItemIDPointer + i)

或者更明显的方法是:

newItemIDPointer[i]

解释一下:假设您有一个指向字符串的指针,称为 p:

char *p = "ABCDE";

假设指针 p 恰好有一个值 0x4001。那将是字符串中第一个字符的地址,它恰好是 A 的字母 ASCII 值(我只是完全编造了这个数字,实际上操作系统和/或编译器确定实际内存位置)...

那么,p + 1 将为我们提供 0x4002.. 字母 B 的位置。它不是 B 的 ASCII 值,它恰好是十进制的 66...这就是您想要传递给 isspace 的内容...存储在其中的值内存位置,而不是内存位置的地址。

对于 C 初学者来说,这是最困难的事情之一,一旦您在脑海中清楚地了解何时操作内存中某个位置的地址以及何时操作存储在该位置的数据,其余的C 很容易...

关于c - 如何修复类型参数与类型参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043897/

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