1. ホーム
  2. c

[解決済み] *初級* C: 'char' 型のパラメータに 'const char *' を渡す、互換性のない整数からポインタへの変換。

2022-02-16 02:27:58

質問

文字列の各文字を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* "をmainに追加しました。

解決方法は?

文字から数値への変換は必要ありません。データの解釈の問題です。

Aという文字列は0x41や65と考えることができるので、これは全く問題ないです。

int number = 'A';

で、変数番号の値は0x41/65または1000001bです。

解釈としては、0xFFを符号無しで表示すると255、符号付きで8ビットで表示すると-1として扱われる可能性があります。

では、ご質問の件です。

<ブロッククオート

は、文字列をASCII値に変換することができますか?

文字列のすべての文字はすでにアスキー値であり、それをどのように扱い、印刷し、解釈し、表示するかの問題なのです。