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

时间:2013-11-09 07:34:47

标签: c cs50

我正在尝试将字符串中的每个字母转换为它的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*”。

3 个答案:

答案 0 :(得分:7)

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

因此,

int letter = ptext[i];

可以胜任。

答案 1 :(得分:2)

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

Charater'A'可以被认为是0x41或65,所以这很好:

int number = 'A';

并且变量编号的值为0x41 / 65或1000001b,具体取决于您要如何呈现/处理它。

至于解释:如果将0xFF表示为无符号值,则0xFF可被视为255;如果将其视为有符号值,则可将其视为-1。

所以你的问题:

  

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

有点不对 - 字符串的所有字符都已经是ascii值 - 这只是你如何处理/打印/解释/呈现它们的问题。

答案 2 :(得分:1)

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

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

将字符的ascii值存储到整数变量中将字符直接赋值给整数变量。

int letter = ptext[i];