C-用getpid()中的ID替换字符串中的$$?

时间:2018-11-15 02:18:42

标签: c string replace

如果我有如下字符串:

char* exampleString = "test$$";

假设getpid()返回1587

如何将字符串中的$$替换为getpid()的结果,使得结果将是字符串"test1587"

2 个答案:

答案 0 :(得分:3)

由于"test$$"是不可变的,并且指向它的指针最好是char const*而不是char*,因此您必须将其复制到一个数组中,然后才能替换{{1} }。

可能的解决方案:

"$$"

答案 1 :(得分:1)

您不能进行直接替换,因为您的字符串(字符数组)的长度不足以容纳pid,并且当然,如果声明为字符串文字也不是可变的。

您可以通过多种方式来实现此目的,但这是一个相当优雅的方式:

/* Modify the existing string to be a pattern string for snprintf */
int len = strlen(exampleString) - 1; /* Can you see why I might do this? */
char* formatString = strdup(exampleString); /* Because we can't modify a literal */
int newLen = len + 12; /* How about this? */
char *pidString = malloc(newLen);
int i;
for (i = 0; i < len; i++) {
  if (formatString[i] == '$' && formatString[i+1] == '$') {
    formatString[i] = '%';
    formatString[i+1] = 'd';
    break;
  }
}
snprintf(pidString, newLen - 1, formatString, getpid());

您能遵循它的工作原理吗?

如果exam​​pleString不包含$$,您将如何使其优雅地失败?