我正在尝试使用 printf 系列函数替换/替换更大字符串中的子字符串,但不知道为什么它不起作用。

uint64_t end = 100000;
char *bigchar = "This is a try $TIME_ELAPSED to replace using sprintf";
char *pPos = strstr(bigchar, "$TIME_ELAPSED");
sprintf(pPos, " %7ld ms. ", end);

但是我在 sprintf 行中遇到段错误(memcpy 失败),$TIME_ELAPSED%7ld ms. 都有 13 个字符的长度。

此外,用这个更改 sprintf 也会导致段错误。
sprintf(bigchar, "%.*s% 7ld ms. %s", (int)(pPos-bigchar), bigchar, end, pPos+13 );

最佳答案

pPos 指向 bigchar 缓冲区中的一个位置,该缓冲区是只读的,因为它包含字符串文字。在 sprintf 调用中,您尝试修改此只读缓冲区。

关于c - 为什么我不能使用 printf 格式替换字符串中的子字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22354562/

10-11 15:32
查看更多