-3
我有一個基於用戶輸入的C中的char *
字符串。從這個字符串中,我想選擇一個從第一個位置開始的子字符串,以便在固定寬度的終端上生成的子字符串是n列寬。C:從多字節字符串中選擇一個子字符串,n列寬
從來沒有在過去使用過非ASCII字符,我完全喪失瞭如何解決這個問題,甚至是開始。一些初步的搜索建議使用libiconv
,但似乎沒有幫助。我也嘗試過使用wchar.h
,支持廣泛的角色,但我不確定這是正確的選擇。
編輯:這是我試圖在第一次嘗試:
static int
count_n_cols (const char *mbs, char *mbf, const int n)
{
wchar_t wc;
int bytes;
int remaining = strlen(mbs);
int cols = 0;
int wccols;
while (*mbs != '\0' && cols <= n)
{
bytes = mbtowc (&wc, mbs, remaining);
assert (bytes != 0); /* Only happens when *mbs == '\0' */
if (bytes == -1)
{
/* Invalid sequence. We'll just have to fudge it. */
return cols + remaining;
}
mbs += bytes;
remaining -= bytes;
wccols = wcwidth(wc);
*mbf += wc;
cols += (wccols == -1? 1 : wccols);
}
return cols;
}
添加了我試圖寫入的函數。我不確定這是否是繼續前進的最佳方式。 – darnir 2014-08-30 03:56:51
你的代碼有什麼問題?乍一看它看起來不錯。 – 2014-08-30 04:04:28