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

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

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

Студворк — интернет-сервис помощи студентам
Однако здравствуйте
Как в чистом си преобразовать значения из char* в char[]
Если
C
1
Char * tmp = "someText"
Спасибо за внимание.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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 med univere", "NewYork New York...

Assigning from int to char[10] from char to char[10]
добрый день, подскажите пожалуйста, в карточной колоде 52 карты, у меня есть массив структур где Value 1 2 3 ...13 suit c h d s ...

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

9
10 / 10 / 13
Регистрация: 17.02.2014
Сообщений: 58
22.12.2016, 01:50
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
 Аватар для mokojumbot
160 / 160 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
22.12.2016, 06:26
в Си имя массива это указатель на его первый элемент
и указатели и массивы одного типа можно одинаково использовать и передавать их в качестве аргументов в любом виде
Кликните здесь для просмотра всего текста
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Эксперт С++
 Аватар для TheCalligrapher
12901 / 6761 / 1816
Регистрация: 18.10.2014
Сообщений: 17,097
22.12.2016, 07:35
Цитата Сообщение от mokojumbot Посмотреть сообщение
в Си имя массива это указатель на его первый элемент
Разве?

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

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

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

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

Уточните, что именно вам надо сделать.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38001 / 21033 / 4301
Регистрация: 12.02.2012
Сообщений: 34,598
Записей в блоге: 14
22.12.2016, 08:06
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
 Аватар для mokojumbot
160 / 160 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
22.12.2016, 16:20
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Разве?
Цитата Сообщение от K&R, C (5.3)
По определению значение переменной или выражения типа массив есть адрес нулевого элемента массива.
Ага, к 6 утра с определениями переиначил. Смысл по коду был, вроде, понятен.
0
644 / 398 / 76
Регистрация: 21.09.2008
Сообщений: 1,367
22.12.2016, 19:57
Цитата Сообщение от Вронскиан Посмотреть сообщение
Как в чистом си преобразовать значения из char* в char[]
Вдумчиво познаём дзен в разделе 4.4.7. Строковые литералы со страницы 265 прекрасной книги.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12901 / 6761 / 1816
Регистрация: 18.10.2014
Сообщений: 17,097
22.12.2016, 20:58
Цитата Сообщение от mokojumbot Посмотреть сообщение
Цитата Сообщение от K&R, C (5.3)
По определению значение переменной или выражения типа массив есть адрес нулевого элемента массива.
Ну, строго говоря, и K&R тут тоже косячит вовсю. "По определению"? По определению чего? "Значение переменной или выражения"? "Или"? В С доступ к значению переменной делается только через выражение.

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

(А в современном С есть еще и четвертое исключение - _Alignof)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2016, 22:03
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Создаем микросервисы с Go и Kubernetes
golander 02.07.2025
Когда я только начинал с микросервисами, все спорили о том, какой язык юзать. Сейчас Go (или Golang) фактически захватил эту нишу. И вот почему этот язык настолько заходит для этих задач: . . .
C++23, квантовые вычисления и взаимодействие с Q#
bytestream 02.07.2025
Я всегда с некоторым скептицизмом относился к громким заявлениям о революциях в IT, но квантовые вычисления - это тот случай, когда революция действительно происходит прямо у нас на глазах. Последние. . .
Вот в чем сила LM.
Hrethgir 02.07.2025
как на английском будет “обслуживание“ Слово «обслуживание» на английском языке может переводиться несколькими способами в зависимости от контекста: * **Service** — самый распространённый. . .
Использование Keycloak со Spring Boot и интеграция Identity Provider
Javaican 01.07.2025
Два года назад я получил задачу, которая сначала показалась тривиальной: интегрировать корпоративную аутентификацию в микросервисную архитектуру. На тот момент у нас было семь Spring Boot приложений,. . .
Содержание темы с примерами на WebGL
8Observer8 01.07.2025
Все примеры из книги Мацуды и Ли в песочнице JSFiddle Пример выводит точку красного цвета размером 10 пикселей на WebGL 1. 0 и 2. 0 WebGL 1. 0. Передача координаты точки из главной программы в. . .
Основы WebGL. Простой треугольник
8Observer8 01.07.2025
Простой треугольник без трансформаций. Для трансформаций можно использовать glMatrix, как в примере: https:/ / plnkr. co/ edit/ qT6ZTwvncLPRamK5?preview На русском: . . .
Полиглотные микросервисы на C# и .NET
ArchitectMsa 30.06.2025
Полиглотная архитектура появилась не из желания усложнить жизнь разработчикам. Она родилась из практической необходимости решать разные задачи наиболее эффективным способом. В одном из проектов. . .
Стратегии кеширования
Javaican 29.06.2025
Кеширование — это хранение часто запрашиваемых данных в быстром хранилище (обычно в памяти), чтобы не обращаться к более медленному первоисточнику. Казалось бы, все просто. Но за этой простотой. . .
Наблюдаемость приложений ASP.NET Core с OpenTelemetry, Prometheus и Grafana
ArchitectMsa 29.06.2025
Наблюдаемость (observability) – это ключевое свойство современной системы, позволяющее понимать её внутреннее состояние на основе внешних данных. Если мониторинг отвечает на вопрос "что случилось?",. . .
Четыре главных модели отношений классов в с++
russiannick 28.06.2025
Продолжаю крестовый поход против c++. ideone. com/ юзаю для проверки валидности кода. Насчитал 4 модели отношений классов: одиночный класс, равноправные классы, слейв - мастер, терминатор. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru