c - 为什么我不能使用 printf 格式来替换字符串中的子字符串?

标签 c replace printf

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

相关文章:

android - ftello 函数未声明

java - 未从字符串中正确删除停用词

Javascript:如果冒号则删除最后一个字符

c - C 编程中读取行直到特定行

c - 从 Linux 用户空间设置 16550A UART 硬件 FIFO 中断级别

c - 在 C 语言的 Mac OS X 上使用 libpcap 进行嗅探

javascript - 如何替换字符串但排除某些单词

c - 在 printf 中设置可变文本列宽度

c - 为什么 printf() 之后的行调用 sleep() 在打印任何内容之前执行?

c - c中的fprintf输出错误