この関数は、NULLで終了する文字列へのポインタの1次元配列を必要としています。しかし、代わりに2次元配列のcharを渡そうとしています。彼らは同じものではありません!
非常に少なくとも、あなたは最初の配列、例えばの要素へのポインタが含まれている二番目の配列を作成することができます:あなたが使用しなければならない、とにかくC++を使用していることから、言われていること
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <windows.h>
void test(DWORD a, wchar_t * lines[])
{
for (unsigned int i = 0; i < a; ++i) {
std::wcout << lines[i] << std::endl;
}
}
int main()
{
FILE *pFile;
wchar_t *file = L"d:\\a.txt";
wchar_t lineData[100][MAX_PATH];
wchar_t* lines[100];
wchar_t *line;
unsigned int a = 0;
if (_wfopen_s(&pFile, file, L"r, ccs = UNICODE") == 0)
{
do
{
line = lineData[a];
if (!fgetws(line, MAX_PATH, pFile))
break;
size_t len = wcslen(line);
if ((len > 0) && (line[len-1] == L'\n'))
line[--len] = 0;
lines[a] = line;
}
while (++a < 100);
fclose(pFile);
}
test(a, lines);
return 0;
}
を`無効テスト(DWORD []、wchar_t型*ライン)` ``無効テスト(のconstのstd :: wstringの&ライン)とを交換し、取得
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
void test(const std::vector<std::wstring> &lines)
{
for (std::wstring &line : lines) {
std::wcout << line << std::endl;
}
/* or: prior to C++11:
for (std::size_t i = 0; i < lines.size(); ++i) {
std::wcout << lines[i] << std::endl;
}
or:
for (std::vector<std::wstring>::iterator iter = lines.begin(); iter != lines.end(); ++iter) {
std::wcout << *iter << std::endl;
}
*/
}
int main()
{
std::vector<std::wstring> lines;
std::wstring line;
std::wifstream file(L"d:\\a.txt");
if (file.is_open())
{
while (std::getline(file, line)) {
lines.push_back(line);
}
file.close();
}
test(lines);
return 0;
}
:ファイル、例えばを読むために代わりにCの機能のC++の機能C++の良い本がいくつかあります。 – IInspectable
@Claudia:あなたの関数はポインタの1次元配列を必要としています。あなたは2次元の文字列を渡そうとしています。同じことではありません! –
@IInspectableはwchar_tを渡す方法がありませんか?私はwchar_tが欲しい。 – Claudia