Как поместить двузначный символ типа '51' в массив символов? - PullRequest
0 голосов
/ 17 января 2019
#include<stdio.h>


int main(){
char array[3][3]={{'2','1','3'},{'4','5','9'}};
array[0][0]='51';

}

Предупреждение об ошибке: константа из нескольких символов [-Wmultichar] массив [0] [0] = '51'; ^ ~~~ 17.4.c: 6: 17: предупреждение: переполнение при неявном преобразовании констант [-Woverflow]

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Если вы хотите использовать многосимвольные константы, вы дали хранить их в целочисленных переменных, больших чем символы.Например, это работает - определенным образом, то есть в нем хранится мультисимвол:

int x = '52';
0 голосов
/ 17 января 2019

Если вы хотите сохранить две десятичные цифры в одном символе, вы можете использовать 4-битные полубайты для хранения цифр

int two_to_one(const char *number)
{
    return *number - '0' + ((*(number + 1) - '0') << 4);
}

char *char one_to_two(int ch, char *buff)
{
    buff[1] = ch >> 4;
    buff[0] = ch & 0xf;
    buff[2] = 0;

    return buff;
}
0 голосов
/ 17 января 2019

Символ может содержать только один символ. «51» - это два символа. Это может быть три, если вы напишите это в двойных скобках («51»), потому что строки типа C всегда заканчиваются на \0. Чтобы содержать более одного символа, вы должны использовать указатели и двойные скобки или обращаться к ним по-разному, используя одно измерение:

char* array[3] = {"one", "two", "three"}; 
char string[3][7] = {"one", "two", "three"};

Вторая строка сообщает, что можно использовать 3 строки, содержащие не более 7 символов (включая \0). Я выбрал такое число, потому что «три» состоит из 6 символов.

...