我正在尝试使用2种方法计算我的C程序中wchar_t字符串的行数:第一种方法使用循环通过缓冲区计数“\ n”,第二种方法使用wcstok()
但是我只得到第二种方法返回正确的行号,第一种方法总是返回0:这是我的完整程序代码:
#include <stdio.h>
#include <string.h>
const wchar_t* ret2line_template = L"\n";
int get_lines_count1(wchar_t* w){
int count=0;
int i;
for(i=0;i<wcslen(w);i++)if((w[i]==ret2line_template[0]) && (w[i+1]==ret2line_template[1]))count++;
return count;
}
int get_lines_count2(wchar_t* w){
int count=0;
wcstok(w, ret2line_template);
do{count++;}while(wcstok(0, ret2line_template));
return count;
}
int main(){
const wchar_t* s = L"00\n11\n22\n33";
const wchar_t* w;
w = calloc(sizeof(wchar_t*), wcslen(s)+1);
wcscpy(w, s);
printf("lines count from get_lines_count1 = %d\n", get_lines_count1(w)); //this returns 0: incorrect value
printf("lines count from get_lines_count2 = %d\n", get_lines_count2(w)); //this returns 4: the correct value
getch();
}
那么我的get_lines_count1
函数及其循环有什么问题?如何解决这个问题?请帮忙。
答案 0 :(得分:3)
如果您在换行符后跟空字符匹配,则您只在第一个函数中递增count
。
此:
ret2line_template[1]
条件表达式中的正在查看第二个wchar_t:
const wchar_t* ret2line_template = L"\n";
这是零终止符。字符串中的wchar_t对都不匹配,因此结果为零。只需找一个L'\n'
。如果在最后一个之后留下了字符,请再添加一个字符&#34; line&#34;到你的计数(最后一个没有L'\n'
尾随的。