-2
我试图使用wcstok()
字符串来得到wchar_t
字符串的每一行,该字符串应该包含至少两行,最新的'wcstok(0,L“\ n”)'总是为空结果我得到i
的值使用printf
作为1而不是2或更高,但问题在做#if 0
而不是#if 1
时得到解决。 这是下面的代码:wcstok()无法正常工作?
wchar_t* w;
wchar_t* line;
int j;
wchar_t**** lines;
int** linescount;
......
int i=0;
#if 1 //problem get solved when changing to #if 0
line = wcstok(w, L"\n");
do{
((*linescount)[j])++;
}while(line=wcstok(0, L"\n"));
(*lines)[annex] = calloc(sizeof(wchar_t**), (*linescount)[j]);
#endif
line = wcstok(w, L"\n");
do{
#if 1 //problem get solved when changing to #if 0
(*lines)[j][i] = calloc(sizeof(wchar_t*), wcslen(line)+1);
wcscpy((*lines)[j][i], line);
#endif
i++;
}while(line=wcstok(0, L"\n"));
printf("i = %d\n", i); /*prints the i value to check if the latest line=wcstok(0, L"\n") worked correctly or not*/
有啥认为这个问题的原因是什么?我该如何解决它?请帮忙。
那么问题的原因是什么? wcstok()循环又被执行了吗?或究竟是什么? – user3457200
因为第二次写'line = wcstok(w,L“\ n”)时缓冲区已经在第一个#if 1中修改过了;'它将无法正常工作。 –
@ user3457200那么,问题的根源*原因是你不明白'wcstok()* *做了什么*。它用空字符替换发现的分隔符。在数据缓冲区中进行第二遍传递,寻找前一个消息刚刚消失的事情自然不会找到现在消失的消息,因此返回NULL。对于这个任务,首先不需要wcstok,但是如果你真的使用它,它应该只是第二遍,而不是第一遍。只需走字符串并为第一遍计数换行符,并且不要忘记,最后一个字符串可能不会以一个结尾。 – WhozCraig