假设我有一个具有参数-值对的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 v指向p中的“男性”,my的问题是的空终止符在哪里存储?在p和ch中,它都是“男性”后面的空格,在这里,v是指针,而不是缓冲区。
发布于 2017-10-21 16:07:55
我的问题是v的空终止符存储在哪里?
没有。您正在调用https://en.wikipedia.org/wiki/Undefined_behavior,因为v未初始化。不仅null终止符,而且sscanf()将“男性”写入v所指向的位置都是无效的。因为v没有指向有效的内存位置。
sscanf()将执行空终止,但您必须传递一个有效的指针(例如char v[5])。注意,sscanf()根本没有修改它的第一个参数。所以ch不会被sscanf()修改。
https://stackoverflow.com/questions/46865111
复制相似问题