初学者C语言:不兼容的整数到指针转换,将'char'传递给类型为'const char *'的参数。

10

我试图将字符串中的每个字母转换为其ASCII编码。使用

 int letter = (atoi(ptext[i]));

给我产生了这个错误:

error: incompatible integer to pointer conversion
  passing 'char' to parameter of type 'const char *'; take the
  address with & [-Werror]
    int letter = (atoi(ptext[i]));
                       ^~~~~~~~
                       &
/usr/include/stdlib.h:148:32: note: passing argument to parameter
      '__nptr' here
extern int atoi (__const char *__nptr)

以下是我其他一些可能相关的代码:

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

int main(int argc, string argv[])
{

    printf("Give a string to cipher:\n");
    string ptext = GetString();

    int i = 0;

    if (isupper(ptext[i]))
    {
        int letter = (atoi(ptext[i]));
    }
}
我做错了什么,如何修复它以便我可以将字符串转换为ASCII值?
注意:在主函数中,cs50.h 允许我使用“string”而不是“char*”。
3个回答

9

atoi()需要一个字符串作为参数。但是,你只需要字符的代码...也就是这个字符本身,因为在C语言中,char是一种普通的整数类型,就像其他整数一样,而字符串则是包含字符代码本身的char数组。

因此,

int letter = ptext[i];

会做这项工作。

1
@haccks 谢谢!:) 祝福永远不会晚。 - user529758

3

您不需要将字符转换为数字。这是您的数据解释的问题。

字符“ A”可以视为0x41或65,因此这完全没有问题:

int number = 'A';

变量number上的值为0x41/65或1000001b,具体取决于您如何呈现和处理它。关于解释:如果将0xFF表示为无符号值,则可以将其视为255,甚至在8位中保持为有符号并将其视为-1。所以你的问题:“能将字符串转换为ASCII值吗?”有点错误——字符串的所有字符已经是ASCII值了——只是需要考虑如何处理/打印/解释/呈现它们。

2
int letter = (atoi(ptext[i]));

atoi()函数将字符串转换为整数,而不是字符。

如果要将字符的Ascii值存储到整型变量中,请直接将字符赋值给整型变量即可。

int letter = ptext[i];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接