有沒有辦法使用scanf()
從字節數組中掃描字符串?從字節數組中掃描字符串
即:在找到特定值之前掃描任意數量的字節,然後掃描後續字符串?
我遇到的主要問題是處理'\0'
的值。有沒有辦法讓scanf()
以受控方式繞過NUL
終止符?
有沒有辦法使用scanf()
從字節數組中掃描字符串?從字節數組中掃描字符串
即:在找到特定值之前掃描任意數量的字節,然後掃描後續字符串?
我遇到的主要問題是處理'\0'
的值。有沒有辦法讓scanf()
以受控方式繞過NUL
終止符?
爲什麼不只是遍歷字符串?
char str[30];
char str1[30];
char str2[30];
//Initialize str it to some string
int i=0;
while(str[i]!='x') //say scan till you find x
{
i++;
}
i++;
memcpy(str1, str, i); //extract this substring till x
str1[i+1]='\0';
int j=0;
while(str[i]!='\0') //now copy the rest
{
j++; //track the point where x appeared
i++;
}
memcpy(str2, &str[i-j], j); //extract the rest
str2[j+1]='\0';
您可以使用sscanf()
代替:
char string[100] = "720 11 43";
int x, y, z;
sscanf(string, "%d %d %d", &x, &y, &z);
不知道這是什麼問。 –
@邁克爾瓦爾茲:人無法確定任何事情。這個問題不是很清楚。也許她甚至不知道她真正需要什麼。但她正在談論空字符,閱讀字符串和函數scanf()。讓我們拭目以待,看看這個答案是否讓**線**感到高興。 – pablo1977
不能使用sscanf()
因爲sscanf()
停止當達到'\0'
字節數組做到這一點。 @Joseph Quinsey
如果代碼是從一個文件或stdin
讀取,那麼有一個解決方案。
fscanf("%[^something]")
和fscanf("%c")
都將掃描'\0'
。即使fgets()
也會掃描一個'\0'
。
OP:「在找到特定值之前掃描任意數量的字節,然後掃描後續字符串?」
以下將1)掃描任意數量的字節,直到找到x
,2)掃描x
,3)掃描空白和4)掃描並保存非空白區域。不幸的是,這最後一步將嵌入式'\0'
視爲非空白區域。
ch ch;
char buf[100];
if (1 == fscanf(inf, "%*[^x]x%99s", buf)) string_after_x_is_found(buf);
要在一般意義上
FILE *inf;
inf = fopen("something", "rb");
char ch;
while (fscanf(inf,"%c", &ch) == 1) {
foo(ch);
}
fclose(inf);
嵌入式'\0'
使用fscanf("%c")
真的攪亂scanf()
家庭。謹慎使用格式可以工作,但我建議只用fread()
或fgetc()
來代替。
OP要求「從字節數組中掃描字符串」,而不是從「FILE *」中掃描。 –
@Joseph Quinsey我用「scanf()從一個字節數組中掃描一個字符串」暗示使用'scanf()'_family_函數。 'scanf()'只能從'stdin'獲得輸入,所以掃描一個字符串意味着'sscanf()',這正如你所想的那樣 - 不是一個FILE,並且不適合掃描一個''\ 0''。 'fscanf()'和'scanf()'都可以用正確的指令掃描''\ 0''。儘管在stdin中看到一個''\ 0''雖然 - 通常是一個管道,這很棘手。 – chux
Scanf僅用於掃描零終止的字符串。所以你不能跳過零終止符。請解釋你想要做什麼。 –
你有沒有你嘗試過的例子?或者輸入的一些例子,以及預期的輸出? – Dabo
@Michael Walz'scanf()',從'stdin'掃描,_can_掃描通過''\ 0''使用'scanf(「%[^ \ n]」,buf)'。這將接受輸入並保存,直到達到''\ n'',包括''\ 0''。一旦發生'\ n'',掃描就會停止('\ n''放回到'stdin'),並且一個''\ 0''被添加到'buf'。如果掃描了''\ 0',使用'strlen(buf)'可以減少結果。使用'scanf(「%[^ \ n]%n」,buf,&n)',代碼可以確定掃描的長度。在'stdin'中看到一個''\ 0''並不常見。 – chux