簡體   English   中英

字符串中的C字符串指針如何​​以空值終止?

[英]How a C string pointer within a string is null-terminated?

假設我有一個帶有參數-值對的C字符串ch

#include <string.h>
char ch[] = "name=John sex=male age=30"; // null-terminated C string
char *p, *v; // pointers to parameter and value

p = strstr(ch, "sex="); // p now points to "sex=male age=30"
sscanf(p, "sex=%s", v); // get the value for sex
printf("sex = %s\n", v); // gives "male", works as expected
printf("length of v is %i\n", strlen(v)); // gives 4
printf("is v null-terminated? %i\n", (*(v+4)=='\0')); // gives 1

我的理解是pch指向“ sex = M age = 30”,並使用與ch相同的空終止符。 v指向p “ male”, 我的問題是v的空終止符存儲在哪里? 它是pch “ male”之后的空格,這里v是指針,而不是緩沖區。

我的問題是v的空終止符存儲在哪里?

沒有。 您正在調用未定義的行為,因為v未初始化。 不僅空終止符,而且sscanf()在v所指向的位置中寫入“ male”都是無效的。 因為v沒有指向有效的內存位置。

sscanf()將執行空終止,但是您必須傳遞有效的指針(例如char v[5] )。 請注意, sscanf()根本不會修改其第一個參數。 因此ch不會被sscanf()修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM