我正在尝试使用 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/