ОШИБКА: несовместимое преобразование целого числа в указатель, присваивающее ‘string’ (он же ‘char *’) из ‘int’

#c #cs50

#c #cs50

Вопрос:

Я создал массив из 26 букв, и я хочу присвоить каждому элементу их значения ASCII следующим образом:

 ASCII[0] = 65
ASCII[1] = 66
  

Я уже определил ASCII[0] как «A» в своем массиве. Итак, результат, который, я надеюсь, должен быть:

 A = 65
B = 66
  

Итак, в чем проблема?Вот мой код:

 #include <cs50.h>
#include <stdio.h>

#define SIZE 26

int main(void)
{
    string ASCII[SIZE] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

    for(int i=0; i<26; i  )
    {
        ASCII[i] = i 65;
    }
}
  

Комментарии:

1. ‘A’ — это символ. «A» — это массив из 1 символа (плюс нулевой ограничитель).

Ответ №1:

К сожалению, вы укусили глупый string typedef курса CS50. In cs50.h string это typedef для указателя на char . Обычно мы вообще не используем такой typedef в C — об этом ведутся длительные дебаты в выпусках libcs50.

То i 65 , что вы делаете, есть число, а не указатель — в данном случае для одного символа.

То, что вы хотите, это либо:

 char ASCII[SIZE] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  

или

 char ASCII[SIZE];
for (int i = 0; i < SIZE; i   ) {
    ASCII[i] = i   65; // or even better: i   'A'
}
  

любой из них будет иметь любой элемент массива из 26 символов ASCII[i] , равный 65 i .

Комментарии:

1. Да, это работает! Так что это просто CS50, большое вам спасибо.