Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/75: Рейтинг темы: голосов - 75, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 11
1

Преобразование из *char в char[]

21.12.2016, 23:37. Показов 13925. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Однако здравствуйте
Как в чистом си преобразовать значения из char* в char[]
Если
C
1
Char * tmp = "someText"
Спасибо за внимание.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2016, 23:37
Ответы с готовыми решениями:

CONST_RETURN char *__cdecl strstr (const char *_Str, const char *_SubStr)
#include <stdio.h> #include <string.h> char tracks = { "ya ostavil svoe serdce v harvardskom...

Assigning from int to char[10] from char to char[10]
добрый день, подскажите пожалуйста, в карточной колоде 52 карты, у меня есть массив структур где ...

Переход с 10 на 17 Студию 2440 =: невозможно преобразовать "const char [2] в char*
Доброго Нового года! Через пару дней сдавать контрольную работу, которую сделал ещё вначале...

Ошибка в коде: несовместимы типы операндов (char и const char)
Текст не содержит знаков препинания и набран одинаковым шрифтом. Составить программу определения...

9
10 / 10 / 13
Регистрация: 17.02.2014
Сообщений: 58
22.12.2016, 01:50 2
C
1
2
3
4
5
char* tmp = "someText";
char txt[8];
int i = 0;
for(; i < 8; i++)
txt[i] = *(tmp+i);
но если же ты про создание в программе такого массива
C
1
char txt[n];// n -получаемое в ходе программы число
то нельзя. Создать массив в си можно только статическим значением переменной, а не в коем случае не вычисляемым в ходе кода
0
160 / 160 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
22.12.2016, 06:26 3
в Си имя массива это указатель на его первый элемент
и указатели и массивы одного типа можно одинаково использовать и передавать их в качестве аргументов в любом виде
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
void usearray(char array[], char array2[])
{
   printf("array addresses: %p | %p\n", array, array2);
}
 
void usepointer(char *pointer, char *pointer2)
{
   printf("pointer addresses: %p | %p\n", pointer, pointer2);
}
 
int main()
{
   char *tmp = "someText";
   printf("%c, %c\n", tmp[4], *(tmp+4));
   char tmp2[] = "someText";
   printf("%c, %c\n", *(tmp2+4), tmp2[4]);
   
   usearray(tmp, tmp2);
   usepointer(tmp, tmp2);
   
   int i = 0;
   for (; i <= 9; i++)
      printf("%c", tmp[i]);
   printf("\n");
   
   return 0;
}
0
Вездепух
Эксперт CЭксперт С++
11721 / 6400 / 1725
Регистрация: 18.10.2014
Сообщений: 16,138
22.12.2016, 07:35 4
Цитата Сообщение от mokojumbot Посмотреть сообщение
в Си имя массива это указатель на его первый элемент
Разве?

А почему же тогда вот такой код является ошибочным

C
1
2
int a[] = { 1, 2, 3 };
int **p = &a; // Ошибка
Если "имя массива является указателем на его первый элемент", то тогда &a должно быть указателем на указатель, правда?

Так в чем же дело?

Добавлено через 1 минуту
Цитата Сообщение от Вронскиан Посмотреть сообщение
Как в чистом си преобразовать значения из char* в char[]
Вопрос бессмыслен в такой форме. Язык С не поддерживает преобразование к типу "массив".

Уточните, что именно вам надо сделать.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36846 / 20406 / 4235
Регистрация: 12.02.2012
Сообщений: 33,769
Записей в блоге: 13
22.12.2016, 08:06 5
char* и char[] можно использовать почти как синонимы. Разница лишь в том, что если написано:

C
1
    char *S="abc";
то массив символов S содержит 4 элемента с индексами 0,1,2,3. При этом S[0]=='a', S[1]=='b', S[2]=='c', S[3]==нуль-символ.

И обратно. Если задан массив:

C
1
   char X[]={'a','b','c'};
то *X=='a'; *(X+1)=='b'; *(X+2)=='c';
0
160 / 160 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
22.12.2016, 16:20 6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Разве?
Цитата Сообщение от K&R, C (5.3)
По определению значение переменной или выражения типа массив есть адрес нулевого элемента массива.
Ага, к 6 утра с определениями переиначил. Смысл по коду был, вроде, понятен.
0
620 / 378 / 72
Регистрация: 21.09.2008
Сообщений: 1,293
22.12.2016, 19:57 7
Цитата Сообщение от Вронскиан Посмотреть сообщение
Как в чистом си преобразовать значения из char* в char[]
Вдумчиво познаём дзен в разделе 4.4.7. Строковые литералы со страницы 265 прекрасной книги.
0
Вездепух
Эксперт CЭксперт С++
11721 / 6400 / 1725
Регистрация: 18.10.2014
Сообщений: 16,138
22.12.2016, 20:58 8
Цитата Сообщение от mokojumbot Посмотреть сообщение
Цитата Сообщение от K&R, C (5.3)
По определению значение переменной или выражения типа массив есть адрес нулевого элемента массива.
Ну, строго говоря, и K&R тут тоже косячит вовсю. "По определению"? По определению чего? "Значение переменной или выражения"? "Или"? В С доступ к значению переменной делается только через выражение.

Да и каких, интересно, выражениях идет речь?
0
160 / 160 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
22.12.2016, 21:46 9
TheCalligrapher, по определению (стандарту) языка, видимо. О любых выражениях, которые возвращают массив.
0
Вездепух
Эксперт CЭксперт С++
11721 / 6400 / 1725
Регистрация: 18.10.2014
Сообщений: 16,138
22.12.2016, 22:03 10
Цитата Сообщение от mokojumbot Посмотреть сообщение
по определению (стандарту) языка, видимо. О любых выражениях, которые возвращают массив.
Ну стандарт языка-то ясно говорит, что перобразование типа "массив" к типу "указатель" происходит отнюдь не в любых выражениях типа "массив". Всегда было три исключения: 1) операнд унарного оператора &, 2) операнд оператора sizeof, 3) строковый литерал, используемый для инициализации char массива.

(А в современном С есть еще и четвертое исключение - _Alignof)
0
22.12.2016, 22:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2016, 22:03
Помогаю со студенческими работами здесь

Error C2440: =: невозможно преобразовать 'char (*)[150]' в 'char *'
Есть следующая задача. Написать программу, которая запрашивает количество родственников в семье, а...

Const char нельзя присвоить сущность типа char
Здравствуйте! Начинаю изучать Си И вот у меня немного не получается написать свою первую...

Преобразование int в char
Всем привет! Мне нужно преобразовать число в строку. Использую sprintf() всё работает, НО...

Преобразование void* в char*
Мне нужно написать абстрактную функцию двоичного поиска для любого типа данных, в котором функция...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru