2014-09-16 4 views
-2

У меня есть массив 2D TCHAR. Мне нужно скрыть его до 1D массива. Для этого мне нужно получить размер массива TCHAR.Получение размера массива TCHAR

Пусть array[i] = "My name";

Теперь мне нужно, чтобы получить размер array[i]. Есть ли способ получить это? Любая помощь будет оценена по достоинству.

+0

Надеюсь, вы используете 'const' или' # define', а не магические числа (например, '256') непосредственно в вашем коде. Тогда вы можете просто повторно использовать их. – crashmstr

+0

'array [i] = FindFileData.cFileName;' - это присвоение массиву и не будет компилироваться. – interjay

+0

1D-массив: '* (TCHAR (*) [sizeof array/sizeof ** array)]) array' – Deduplicator

ответ

1

сначала добавить эти макросы:

#include <vector> 
#include <string> 

#ifndef UNICODE 
#define tstring std::string 
#else 
#define tstring std::wstring 
#endif 

#ifndef _T 
#define _T(X) X 
#endif 

объявляет вектор TStrings:

typedef std::vector<tstring> tstrings; 

tstrings fileNames; 

for(i=0;i<256;i++) 
{ 
    tstring ts = FindFileData.cFileName; 
    fileNames.push_back(ts); 
} 

знать размер строки нужно просто использовать ts.length()

Теперь вы можете используйте + для добавления строк примерно:

tstring ts1 = _T("hello"); 
tstring ts2 = _T("world"); 
ts1 += _T(" "); 
ts1 += ts2; 

BTW: использование массива как имя переменной может вызвать неоднозначность с помощью std :: array.

+1

Пожалуйста, избегайте 'TCHAR': https://stackoverflow.com/questions/25869571/getting-size-of-a-tchar-array#comment40482260_25869571 – Deduplicator

+0

Ответы на высокий уровень хороши, OP признал плохой: [Is TCHAR по-прежнему актуальна?] (Https://stackoverflow.com/questions/234365/is-tchar-still-relevant) – Deduplicator

+0

@Deduplicator Проблема заключается не в том, чтобы использовать только UNICODE при написании кода кросс-платформы, особенно если ваша файловая система кодирование - UTF-8. рядом с окнами нет оснований использовать UNICODE (и wstring) вообще. В любом случае, я считаю хорошей практикой сохранять переносимость. – SHR

1

Теперь мне нужно получить размер array[i].

Используйте _tcslen, чтобы найти длину нуль-терминатором массив TCHAR, если это действительно то, что вы хотите сделать.

Однако, вы могли бы быть лучше обслуживаться:

  1. Не используя TCHAR вообще вместо этого использовать только UTF-16, закодированный текст, платформы родной кодировки.
  2. Не использовать строки C и вместо этого использовать std::wstring.
+0

Для всех UTF-8 может быть даже лучше ... или нет. – Deduplicator

+0

@Deduplicator Первые вещи сначала, а ?! –

Смежные вопросы