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



我正在尝试将字符串中的每个字母转换为其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让我在main中使用" string "而不是" char*"。

atoi()需要一个字符串。你只需要字符的字符代码...这是字符本身,因为在 C 中,char 是正常的整数类型,就像其他整数一样,字符串是保存字符代码本身的 char 数组。

因此

int letter = ptext[i];

会做这项工作。

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

字符"A"可以被认为是0x41或65,所以这完全没问题:

int number = 'A';

变量数上的值为 0x41/65 或 1000001b,具体取决于您希望如何呈现/处理它。

至于解释:0xFF如果将其显示为无符号值,则可能被视为 255,或者当被视为有符号并保留在 8 位时,甚至可以被视为 -1。

所以你的问题:

可以将字符串转换为 ASCII 值吗?

有点错误 - 字符串的所有字符都已经是 ASCII 值 - 这只是您如何处理/打印/解释/呈现它们的问题。

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

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

要将字符的 ascii 值存储到整数变量中,请将字符直接分配给整数变量。

int letter = ptext[i];

最新更新