Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс "Компьютер" https://www.cyberforum.ru/ cpp-beginners/ thread1390617.html
1. Определить пользовательский класс компьютер(не менее 5 полей). 2. Определить в классе компонента-функции для записи в файл и чтение из файла полей данных. 3. В программе необходимо предусмотреть...
C++ Литература по БД в С++
Можете скинуть литературу по работе с бд в си++ ? :)
Ошибка в visual studio 2010 C++
как исправить эту ошибку ?
C++ Указатель массива int Программа должна выводить максимальное число из введенных, а выводит какое-то большое число вместо этого (это адрес элемента массива?), как это исправить? #include <iostream> using namespace std;... https://www.cyberforum.ru/ cpp-beginners/ thread1390574.html
C++ Класс "Массив" https://www.cyberforum.ru/ cpp-beginners/ thread1390556.html
Пишу класс для реализаций команд с массивами. Хочу в классе создать два конструктора, но второй конструктор, который от двух переменных, первая из которых массив, все время ругается. Скорее всего...
C++ Запись динамического массива в файл
Добрый вечер! У меня, в общем, проблема следующего характера... Есть программа, копирующая html-код с определённой страницы, а затем этот код нужно записать в блокнот. В принципе, он записывает, но...
C++ Cmake
здравствуйте объясните для чего нужен cmake и как получить этот файл попросили прислать cmake лист а я без понятия что это и откуда взять писать начал в Visual Studio Express так что лучше сразу...
C++ Вывести массив, заданный в классе у меня почему то не выводит массив, я не пойму почему, если ввести вместо і номер какого то из элементов класса то все работает, но целый массив не выводит( #include "stdafx.h" #include... https://www.cyberforum.ru/ cpp-beginners/ thread1390543.html
C++ Возвращение исходного массива (классы, указатели) https://www.cyberforum.ru/ cpp-beginners/ thread1390522.html
нужно сделать так чтоб после каждого действия, при указатели на вызов функции output возвращался первоначально введенный массив. Например : 1) ввожу массив 1 -1 2 3 4 2) работает функция output....
C++ Квадратичный алгоритм сортировки подсчётом Здравствуйте!я сижу туплю.....немного понимаю в циклах for в массиве...помогите пожалуйста..как реализовать эту пытался начать:Что мне дальше делать?и мог бы кто нить объясни поподробнее(только не... https://www.cyberforum.ru/ cpp-beginners/ thread1390503.html
3 / 3 / 2
Регистрация: 27.06.2013
Сообщений: 91
0

Функция, получающая подстроку, возвращает испорченный указатель на строку

08.03.2015, 22:21. Показов 636. Ответов 1
Метки (Все метки)

Пытаюсь выделить подстроку в Microsoft Visual C++ 2013, чтобы убрать путь к файлу и оставить только имя файла.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
wchar_t * FileOnly(wchar_t * initial_string)
{
    bool contains_path = false;
    int result_string_index_number = 0;
    for (int i = 0; i < lstrlen(initial_string); i++)
    {
        if (initial_string[i] == '\\')
        {
            contains_path = true;
            result_string_index_number = i;
        }
    }
    if (contains_path == false)
    {
        return initial_string;
    }   
    wchar_t result_string[1024];
    wcsncpy_s(result_string, 1000, result_string_index, lstrlen(result_string_index));
    return result_string;
}
Или вручную, без использования wcsncpy_s.

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
wchar_t * FileOnly(wchar_t * initial_string)
{
    bool contains_path = false;
    int result_string_index_number = 0;
    for (int i = 0; i < lstrlen(initial_string); i++)
    {
        if (initial_string[i] == '\\')
        {
            contains_path = true;
            result_string_index_number = i;
        }
    }
    if (contains_path == false)
    {
        return initial_string;
    }   
    wchar_t result_string[1024];
    int i = 0, j = 0;
    while (initial_string[i])
    {
        if (i>result_string_index_number)
            result_string[j++] = initial_string[i];
        i++;
    }
    result_string[j] = '\0';    
    return result_string;
}
Полученный указатель на строку можно использовать в любой функции, и выдается строка, содержащая имя файла. Но если в функции, где используется указатель на строку, объявить массив, строку или другую переменную, состоящую из нескольких элементов, строка в этой функции портится, и при попытке ее вывести на печать выдается абракадабра. Сравнение с именем файла не работает. В чем здесь дело?

Добавлено через 34 минуты
Название темы не очень удачное - не получающая, а возвращающая подстроку. В первом варианте кода забыл указать строку, которая у меня есть.
C++
1
wchar_t * result_string_index = wcsrchr(initial_string, '\\') + 1;
Перед строкой
C++
1
wchar_t result_string[1024];
Вариант, который у меня.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
wchar_t * FileOnly(wchar_t * initial_string)
{
    bool contains_path = false;
    int result_string_index_number = 0;
    for (int i = 0; i < lstrlen(initial_string); i++)
    {
        if (initial_string[i] == '\\')
        {
            contains_path = true;
            result_string_index_number = i;
        }
    }
    if (contains_path == false)
    {
        return initial_string;
    }   
   wchar_t * result_string_index = wcsrchr(initial_string, '\\') + 1; 
   wchar_t result_string[1024];
    wcsncpy_s(result_string, 1000, result_string_index, lstrlen(result_string_index));
    return result_string;
}
Убрал эту функцию и объединил с другой функцией, где работаю не с указателем, а со строкой. Так вроде бы работает нормально. Но непонятно, в чем проблема с указателем, и есть ли альтернатива возвращению указателя на строку.

Вернуться к обсуждению:
Функция, получающая подстроку, возвращает испорченный указатель на строку
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2015, 22:21
Готовые ответы и решения:

Функция, получающая указатель на обычную функцию, получает указатель на метод класса
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая...

Функция возвращает строку (или указатель на начало строки)
Подскажите пожалуйста. Застрял на тривиальной задачке. Никак не могу добится чтобы функция...

Функция alltrim удаляет из строки начальные и конечные пробелы и возвращает указатель на преобразованную строку
Дали задание в ВУЗе. Назначение программы: Функция alltrim удаляет из строки начальные и конечные...

Функция с указателем и индексом(Удаляет в строке лидирующие пробелы. Возвращает указатель на преобразованную строку.)
Ребята помогите зачет получить, на парах не был..( Написать следующие функции в двух вариантах:...

1
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.