Работа с массивом типа Char

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем привет! Имеется массив:

char Array[] = "Hello!";

как мне из него получить несколько символов? То есть мне из всей строки нужно получить только кусочек "el". Как это можно организовать, есть ли для этого простой способ?

 

rkit
Offline
Зарегистрирован: 23.11.2016

strncpy

mixail844
Offline
Зарегистрирован: 30.04.2012
#include  <stdio.h>
#include "string.h"

char  array[] = "Hello!";
char _el[3] ="";

int main(void)
{
    strncpy(_el,&array[1],2);
    printf("%s",_el);
    return 0;
}

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Мдааа .... и эти люди называют меня троллем! Куда катится мир?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Троллем тебя здесь пока что только я называл. Но, похоже, ты прав, mixail844 - тролляра не меньшего уровня, чем ты :-)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Ворота пишет:

Троллем тебя здесь пока что только я называл. Но, похоже, ты прав, mixail844 - тролляра не меньшего уровня, чем ты :-)

между прочим, для Уно - компилируется ;))))))

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

А чё б ему не компилироваться? Не проверял, но, скорее всего, даже работает!

Троллинг тут тонкий. mixail844 не дописывает хвостовой ноль (а сама strncpy этого не делает!), используя то, что массив _el глобальный, а, значит, изначально заполнен нулями и длина его именно три. Нетрудно представить себе, какие грабли полетят в лоб ТС, если он сделает массив локальным или большей длины. Но тролля это не волнует - у него всё работает :-)))

Молодец mixail844! Тоже люблю такие шутки :-)

nik182
Offline
Зарегистрирован: 04.05.2015

Простите, а куда mixail844 принтэфит? Я чё то потерялся. 

b707
Онлайн
Зарегистрирован: 26.05.2017

троллить начал rkit, предложив именно эту функцию :) Достаточно убрать одну букву :)

mixail844
Offline
Зарегистрирован: 30.04.2012

nik182 пишет:

Простите, а куда mixail844 принтэфит? Я чё то потерялся. 

https://rextester.com/l/c_online_compiler_gcc

nik182
Offline
Зарегистрирован: 04.05.2015

mixail844 пишет:

nik182 пишет:

Простите, а куда mixail844 принтэфит? Я чё то потерялся. 

https://rextester.com/l/c_online_compiler_gcc

Куда gcc принтит понятно. А в ардуине куда? 

rkit
Offline
Зарегистрирован: 23.11.2016

b707 пишет:

троллить начал rkit, предложив именно эту функцию :) Достаточно убрать одну букву :)

Дааа? И какую же?

b707
Онлайн
Зарегистрирован: 26.05.2017

rkit пишет:

Дааа? И какую же?

никакую.

Опять я не по делу вылез :(

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

nik182 пишет:

Простите, а куда mixail844 принтэфит? Я чё то потерялся. 

Добавьте #include <Printing.h> и принтэфьте скока влезет.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

nik182 пишет:

Простите, а куда mixail844 принтэфит? Я чё то потерялся. 

напишы 

int srlPutChar(char c, FILE *AStream) {
	if (c == '\r') srlPutChar('\n', AStream);
	Serial.print(c);
	return 0;
}

void setup(void) {
  Serial.begin(...);
  stdout = fdevopen(srlPutChar,NULL);
.
.
}

и все стандартные Си функции вывода будут пхать всё в Serial. puts, putchar, printf и т.д. 

так же можно и getchar переопределить, и не обязательно на Serial. 

nik182
Offline
Зарегистрирован: 04.05.2015

Это я умею. В смысле переопредеять вывод. Это ещё много лет назад на мsp430 приходилось делать, что бы printf можно было либо в ком порт, либо на 1602 направить. Мне тут реально интересно стало, куда принтф вывод направляет по дефолту. Просто в воздух, куда то в память? Либо в null ? Что у нас stdout по умолчанию?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

nik182 пишет:
Мне тут реально интересно стало, куда принтф вывод направляет по дефолту.

В устройство 0, я так думаю

sadman41
Offline
Зарегистрирован: 19.10.2016
/**
   Stream that will be used as an output stream by the simplified
   functions that don't take a \c stream argument.
 
   The first stream opened with write intent using \c fdevopen()
   will be assigned to both, \c stdin, and \c stderr.
*/
#define stdout (__iob[1])
 
Далее следы теряются в топях avrlib.
arduinec
Offline
Зарегистрирован: 01.09.2015

forfrends пишет:

Всем привет! Имеется массив: char Array[] = "Hello!";
как мне из него получить несколько символов? То есть мне из всей строки нужно получить только кусочек "el". Как это можно организовать, есть ли для этого простой способ?

http://arduino.ru/forum/programmirovanie/etyud-rabota-s-char-strokami