6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
1

Strncpy

09.12.2018, 12:37. Показов 2541. Ответов 5

Одинаково неправильно работают следующие 2 кода:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <string.h>
int main(void)
{
int n;
char s1[4] = "aaa", s2[80];
 
strncpy(s2, s1, 2);
//s2[ sizeof(s2) + 1 ] = '\0';
 
printf("Первые 2 символа: %s", s2 );
 
return 0;
 
}
и соответствен­но с

C
1
s2[ sizeof(s2) + 1 ] = '\0';
Выводит в обоих случаях:
Код
22@
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2018, 12:37
Ответы с готовыми решениями:

с++ strncpy
Скажите пожалуйста, я не могу разобраться с фунуциями strncpy() и с её подобными. везде одна...

Функция strncpy
Вопрос: Есть строка s, в этой строке есть элемент '\n' от которого мне нужно избиваться. Я хочу...

Strncpy
Напишите пожауйста на С аналог функции Strncpy

strncpy
Дана строка: djh,dfkh,sdj. Как последовательно по отдельности записать в strncpy текстовые части: ...

5
62 / 50 / 39
Регистрация: 03.01.2017
Сообщений: 133
09.12.2018, 12:55 2
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
30
31
32
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    int n;
    char s1[4] = "aaa";
    printf("s1: %s\n", s1);
    
    char s2[80] = "";
    strncpy(s2, s1, 2);
    printf("s2: %s\n", s2);
    
    char s3[80];
    n = strlen(s1);
    strncpy(s3, s1, n);
    
    printf ("s3 = %s, n = %d\n", s3, n);
    s3[n-1] = '\0';
    printf("s3: %s\n", s3);
    
    system ("Pause");
    return 0;
}
 
/*
s1: aaa
s2: aa
s3 = aaa, n = 3
s3: aa
*/
0
976 / 642 / 306
Регистрация: 22.02.2018
Сообщений: 1,860
Записей в блоге: 2
09.12.2018, 12:57 3
Проверил в VS2017, Builder 10.3 и DevC++ 5 - нормально все выводит
0
545 / 222 / 72
Регистрация: 01.03.2011
Сообщений: 611
09.12.2018, 13:08 4
Лучший ответ Сообщение было отмечено number_118 как решение

Решение

Жуть какая.
C
1
2
strncpy(s2, s1, sizeof(s2) - 1);
s2[sizeof(s2) - 1] = '\0';
0
С чаем беда...
Эксперт CЭксперт С++
9920 / 5248 / 1437
Регистрация: 18.10.2014
Сообщений: 12,512
09.12.2018, 14:32 5
Цитата Сообщение от number_118 Посмотреть сообщение
Одинаково неправильно работают следующие 2 кода:
Код работает совершенно правильно. Такой код всегда работает правильно - поведение не определено, поэтому любой результат является допустимым.

В первом случае "не строка" выводится через %s - поведение не определено.
Во втором случае делается очевидная запись за пределы массива - поведение не определено.
0
Evg
Эксперт CАвтор FAQ
21244 / 8258 / 636
Регистрация: 30.03.2009
Сообщений: 22,602
Записей в блоге: 30
09.12.2018, 14:49 6
Лучший ответ Сообщение было отмечено number_118 как решение

Решение

Скорее всего ТС делает стандартную ошибку, полагая, что strncpy влепит завершающий нулевой символ. Как на самом деле работает strncpy разжёвано тут: Распространенные ошибки

Цитата Сообщение от number_118 Посмотреть сообщение
и соответствен­но с
Должно быть

C
s2[ 2/* именнно двойку подсовывали в вызов strncpy */ + 1 ] = '\0';
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2018, 14:49
Помогаю со студенческими работами здесь

про strncpy ()
привет=))) вот чето с этой функцией не пойму пример есть #include &lt;iostream&gt; using namespacr...

Не работает strncpy в MV
Не работает strncpy в Micrisoft Visual Задача следущая: Нужно Преобразовать суму к прописному...

Создать аналог strncpy
Добрый день. Столкнулся с проблемой: при компиляции нижеприведенного кода выдает ошибку &quot;Run-Time...

ошибка 4996 strncpy
#include&lt;iostream&gt; #include&lt;Windows.h&gt; #include&lt;fstream&gt; #include&lt;cstring&gt; #include&lt;cstdlib&gt;...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru