Udi*_*pta 0 c string pointers memcpy segmentation-fault
我有这样的C函数..
func(uint8_t *key,uint8_t keylen) {
FILE *fk;
fk=fopen("akey","wb");
fwrite((char *)key,keylen,1,fk);
puts((char *)key); // for testing
fclose(fk);
sprintf(sstring,"... \"%s\" ... ",(char *)key);
// ...other irrelevant stuff for here
system(sstring);
}
Run Code Online (Sandbox Code Playgroud)
我希望提供的键作为输入\"%s\"在sprintf命令中标记的位置使用
输入:
Key=qwerty
Run Code Online (Sandbox Code Playgroud)
输出:
$cat akey
qwerty
Run Code Online (Sandbox Code Playgroud)
和输出puts((char *)key)是 -
qwerty?
// include newline character as well
Run Code Online (Sandbox Code Playgroud)
建议我这个,我尝试了这个(在代码中各自的位置),但得到 segmentation fault
char *p;
memcpy(p,(char *)key,keylen);
puts((char *)p);
Run Code Online (Sandbox Code Playgroud)
您可以使用表单%.*s将其打印出来:
printf("%.*s\n", (int)keylen, (char *)key);
...
sprintf(sstring,"... %.*s ... ", ... (int)keylen, (char *)key ...);
Run Code Online (Sandbox Code Playgroud)
这里从提取维基百科条目上printf:
宽度和精度格式化参数可以省略,或者它们可以是嵌入在格式字符串中的固定数字,或者在格式字符串中用星号"*"表示时作为另一个函数参数传递.例如printf("%*d",5,10)将导致打印"10",总宽度为5个字符,printf("%.*s",3,"abcdef")将导致"abc"正在印刷.
注意:使用8位类型(uint8_t)表示长度将字符串的长度限制为255个字符.更好的是使用size_t.
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |