为什么我的符号计数器是错的?
我有一个函数,其中student_list[i] = "4273 Константинопольский А. А. 4333 знзнз"wchar_t test[15] = "знзнз",但是counter_debt等于0。

void debt() {
  char name[100];
  wchar_t test[15];
  wchar_t * pch;
  int group;
  int exam;
  int counter_debt;
  int i;

  for (i = 0; i < 4; i++) {
    counter_debt = 0;
    sscanf(student_list[i], "%d %[^0-9] %d %S", &group, name, &exam, test);

    pch = wcschr(test, L'н');
    while (pch != NULL) {
      counter_debt++;
      pch = wcschr(pch + 1, L'н');
    }

    printf("%d %s: %d\n", group, name, counter_debt);
  }
}

当我做一个简单的函数时,counter_debt等于2。这是正确的答案。
#include <stdio.h>
#include <wchar.h>

int main () {
  wchar_t str[] = L"знзнз";
  wchar_t * pch;
  int count = 0;

  pch = wcschr(str, L'н');
  while (pch != NULL) {
    count++;
    pch = wcschr(pch + 1, L'н');
  }
  printf("%i", count);
  return 0;
}

升级版:
char *student_list[1000] = [
  "4272 Галкин Г. А. 5445 ззззз",
  "4273 Константинопольский А. А. 4333 знзнз",
  "4273 Курочкин А. А. 3433 знзнн",
  "4272 Козлов И. И. 4443 ззззн"
]

我还有两个char *student_list函数。
我使用Mac OS X 10.10.1和Apple LLVM 6.0版(clang-600.0.56)
完整程序:https://gist.github.com/lgl/4beee20f8d9a5662fef1
students.txt此处:https://gist.github.com/lgl/ebd21d29700284feea11

最佳答案

它取决于用于存储student_list中的字符的数据格式:
如果已经wchar_t,则应使用swscanf()
如果是UTF-8,则在对其使用宽字符函数之前,应通过testwchar_t转换为mbstowcs()
UPD(如您的示例所示):
student_list应该有wchar_t,而不是char
要使mbstowcs()工作(此函数取决于区域设置),您需要调用:

setlocale(LC_ALL, "");

09-25 22:16