gpt4 book ai didi

c - 错误: char converts between pointers to integer types with different sign

转载 作者:行者123 更新时间:2023-12-02 18:01:07 24 4
gpt4 key购买 nike

问题:编写一个程序,对单词中的字母进行排序,这在搜索字谜时很有用。 anagram 接受一个参数,该参数是一个仅包含小写字母的字符串,按字母顺序对字母进行排序,然后打印排序后的字母。您可以使用任何您熟悉的排序算法,但您必须自己编写排序函数。您不得使用库提供的任何排序功能。

用法

$ ./anagram hello
ehllo
$ ./anagram positivity
iiiopsttvy
$ ./anagram abcdef
abcdef

下面的代码是我到目前为止所做的,但我收到错误

passing char * to parameter of unsigned char converts between pointers to integer types with different sign

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

void anagram(unsigned char input[])
{
int count[256] = { 0 };
int i;
for (i = 0; input[i] != '\0'; i++)
{
count[input[i]]++;
}
for (i = 0; i < 256; i++)
{
while (count[i] > 0)
{
printf("%c", i);
count[i]--;
}
}
}

int main(int argc, char* argv[])
{
if(argc > 1)
{
anagram(argv[1]);
}
return 0;

}

最佳答案

对您问题的简短回答是,您收到指针符号不匹配警告,因为您试图将 argv[1] (类型 char *)传递给 anagram,您已使用 unsigned char * 参数声明(虽然您使用 input[],但实际效果是 input code> 当用作参数时衰减为指针)

保留 anagramunsigned char* 类型的简单解决方案是将 argv[1] 转换为 (unsigned char *) 当作为参数传递给 anagram 时,例如

    anagram((unsigned char *)argv[1]);

更实际的问题是“您真的需要 unsigned char* 类型开始吗?”虽然您可以转义非 ASCII 值并将其作为参数传递给程序,但这是您所期望并希望通过使用 unsigned char* 来防止的事情(这是 100% 可以做到的) 。

通常,您只需声明 anagram (char *input) (这是消除指针上有符号不匹配的第二种选择)并将循环限制为在 ASCII 字符的有效范围内循环(参见ASCIItable.com)

只要你一致地处理指针符号,任何一种方法都可以。将其放在一起并从代码中删除魔数(Magic Number),您可以执行类似于以下操作的操作:

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

#define CHRSET 256 /* if you need a constant, define one */

void anagram (unsigned char *input)
{
int i, count[CHRSET] = { 0 };

for (i = 0; input[i] != '\0'; i++)
count[input[i]]++;

for (i = 0; i < CHRSET; i++)
while (count[i] > 0) {
printf("%c", i);
count[i]--;
}
putchar ('\n'); /* provide a POSIX compliant newline before termination */
}

int main(int argc, char *argv[]) {

if (argc < 2) {
fprintf (stderr, "error: insufficient input\n"
"usage: %s <string>\n", argv[0]);
return 1;
}

anagram ((unsigned char *)argv[1]);

return 0;
}

(注意:您还可以将最终换行符的输出移至 main,但除非您打算通过重复调用 将多个已排序字符串混合在一起>anagram,那么最好在每个字符串输出后留下)

仔细检查一下,如果您还有其他问题,请告诉我。

关于c - 错误: char converts between pointers to integer types with different sign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48833911/

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