如果我有如下字符串:
char* exampleString = "test$$";
假设getpid()
返回1587
。
如何将字符串中的$$
替换为getpid()
的结果,使得结果将是字符串"test1587"
?
答案 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());
您能遵循它的工作原理吗?
如果exampleString不包含$$,您将如何使其优雅地失败?