Форум программистов, компьютерный форум CyberForum.ru

Строки в стиле C - C++

Восстановить пароль Регистрация
 
akaelwins
1 / 1 / 2
Регистрация: 11.04.2012
Сообщений: 17
05.12.2012, 22:57     Строки в стиле C #1
Добрый вечер, решил поковыряться со строками в стиле C и наткнулся на следующую проблему.
В 13-й строке компилятор ругается на то, что str1 - не l-значение, не пойму почему.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
#include <cstddef>
using namespace std;
 
int main() {
    char str1[] = "The first string literal";
    char str2[] = "The second one";
    const size_t copy_size = 5;
    strncpy(str1, str2, copy_size);
    while (*str1) {
        cout << *str1;
        ++str1;
    }
    cout << endl;
    if (strcmp(str1, str2) > 0)
        cout << "The first char array is bigeer" << endl;
    if (strcmp(str1, str2) < 0)
        cout << "The second char array is bigeer" << endl;
    if (strcmp(str1, str2) == 0)
        cout << "Arrays are equal" << endl;
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
05.12.2012, 23:04     Строки в стиле C #2
str1 - это имя массива - константное значение
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
05.12.2012, 23:09     Строки в стиле C #3
Согласен Croessmah str1 константное значение, вот почитай статью, так как раз описано очень интересно
http://www.cyberforum.ru/blogs/18334/blog97.html
akaelwins
1 / 1 / 2
Регистрация: 11.04.2012
Сообщений: 17
05.12.2012, 23:11  [ТС]     Строки в стиле C #4
А имя массива разве не является указателем на его первый элемент? Ведь в функции
C++
1
strncpy(str1, str2, copy_size);
в качестве аргументов выступают как раз указатели на первые элементы соответствующих массивов.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
05.12.2012, 23:12     Строки в стиле C #5
Цитата Сообщение от akaelwins Посмотреть сообщение
А имя массива разве не является указателем на его первый элемент?
Является, но менять его нельзя.

можно сделать так:
C++
1
2
3
4
5
     char * p=str1;
    while (*p) {
        cout << *p;
        ++p;
    }
Yandex
Объявления
05.12.2012, 23:12     Строки в стиле C
Ответ Создать тему
Опции темы

Текущее время: 06:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru