0 / 0 / 0
Регистрация: 24.08.2015
Сообщений: 7
|
|||||||||||
1 | |||||||||||
Строковые константы - Too many initializers for 'char []'24.08.2015, 09:50. Показов 8584. Ответов 14
Метки нет (Все метки)
P.S плохо с русским
Парни кто может мне помочи....со строковыми константы вроде я чегота не понемаю Нижу приведу пример моего кода но вот както он не работает
C:\C\test2.c: In function 'int main()': C:\C\test2.c:5:42: error: too many initializers for 'char []' char str[] = {"This is","Char constant"}; ^ [Finished in 0.2s with exit code 1] Или так : что тоже ошибка ########## - 2
C:\C\test2.c: In function 'int main()': C:\C\test2.c:5:42: error: too many initializers for 'char []' char str[] = {"This is","Char constant"}; ^ [Finished in 0.2s with exit code 1] ------------------------------- В чем проблема?
0
|
24.08.2015, 09:50 | |
Ответы с готовыми решениями:
14
Строковые константы и указатели Как задаются строковые константы? Как/где размещаются строковые константы Зачем в jvm нужны строковые константы |
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
||||||
24.08.2015, 09:58 | 2 | |||||
1
|
0 / 0 / 0
Регистрация: 24.08.2015
Сообщений: 7
|
||||||
24.08.2015, 10:06 [ТС] | 4 | |||||
Velesthau,
Jewbacabra Почему этот код в стандарте Си .....и тоже не работает
C:\C\test2.c:4:11: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] char *p = "test string"; так почему они говорят что работает
0
|
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
||||||
24.08.2015, 10:16 | 5 | |||||
Он компилируется, но предупреждает, что "тестовая строка" - это неизменяемая строка (string constant), а p в это коде - указатель на строку, которую компилятор считает, что можно менять. Потом получишься ошибку на стадии работы программы, если через p попытаешься поменять строку (например, сделаешь p[1] = 'a'.
Если ты сделаешь
0
|
24.08.2015, 10:19 | 6 |
Компилер выдал предупреждение на неявное преобразование char* в const char*
Внимательно смотрим на определение int printf(const char *format, ...); Код должен скомпилироватся и корректно отработать (хотя может есть косяки, которые я не увидел)
0
|
0 / 0 / 0
Регистрация: 24.08.2015
Сообщений: 7
|
|||||||||||
24.08.2015, 10:35 [ТС] | 8 | ||||||||||
Velesthau,
Можеш обияснить как работает вот такая конструкция Ну например я этот код понимаю #1
#2
Код #1 p не инициализировается но в p я добовляю адрес str[2] потом вывожу значение переменои p с помошю * Код #2 и без слов понятно НО вотиногда некоторые пишут так *p = i // i из цикла или так *p = 2; --------- *p = "string constant"; Но вот что значет эти все выражение разве * это не значет получять значение катори лежит по адресу 0x....; Можеш обяснить пока что это меня не дает покоя по ночям
0
|
0 / 0 / 0
Регистрация: 24.08.2015
Сообщений: 7
|
||||||
24.08.2015, 11:11 [ТС] | 10 | |||||
Velesthau,
прости но я тебя не понел есль напистаи так char *p = 2; // хотя это выдаст ошибку int не может быть преоброзован в char * тем более будет потеряно 6 byte еслт будет толька int->char без char * .. но допустем то жто значет я инициарищировал укзатель *p со значением 2; тоесть выражение char a = &p; // вернет адрес где лежит двоика а выражение printf(p); // вернет 2 Добавлено через 8 минут Вот этот код дает ошибку
Но выражение ранише char *p = "string constant"; printf(p); //толька предупреждение В чем проблема
0
|
0 / 0 / 0
Регистрация: 24.08.2015
Сообщений: 7
|
|
24.08.2015, 12:58 [ТС] | 13 |
Velesthau, а как насчет строк....char *p = "string"; что вернет в это случее указатель адрес string...тоесть адрес там где лежит это строка.....от этих указателеи у меня головокружение
0
|
0 / 0 / 0
Регистрация: 24.08.2015
Сообщений: 7
|
|
24.08.2015, 15:27 [ТС] | 15 |
Velesthau,
ну вы сказали что *p = 2; то это значет что указатель указывет на адрес 2 значет *p = "string"; содержит адресс string....тоечсть вместо 0x... будет string так.... тогда получается так что *p = string; // адрес указателя p под названием string тогда &p вернет адрес string; я так понел то что с права от указателя это не его значение а адрес но при вызове мы видем типа ка резултат присваивание чего либо указателю но на самом деле это адрес ну например *p = "string"; printf(p); // мы увидем это как результат но это адрес указателя p так....все правелино
0
|
24.08.2015, 15:27 | |
24.08.2015, 15:27 | |
Помогаю со студенческими работами здесь
15
Где в АРМах хранить строковые константы? Комбинаторно- вероятностный смысл константы пи, гамма функция и обобщение константы пи Инициализация массива структур: Array initializers can only be used in a variable or field initializer Char unsigned char signed char длинна Кааак Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |