[英]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
我的理解是p
在ch
指向“ sex = M age = 30”,並使用與ch
相同的空終止符。 v
指向p
“ male”, 我的問題是v
的空終止符存儲在哪里? 它是p
和ch
“ male”之后的空格,這里v
是指針,而不是緩沖區。
我的問題是v的空終止符存儲在哪里?
沒有。 您正在調用未定義的行為,因為v
未初始化。 不僅空終止符,而且sscanf()在v
所指向的位置中寫入“ male”都是無效的。 因為v
沒有指向有效的內存位置。
sscanf()
將執行空終止,但是您必須傳遞有效的指針(例如char v[5]
)。 請注意, sscanf()
根本不會修改其第一個參數。 因此ch
不會被sscanf()
修改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.