原始:b221.html?a1=11.1&a2=22.2&a3=0
目標:a1=33.3, a2=44.4
#include <stdio.h>
#include <string.h>
// 在 str 中尋找 key,將其後緊鄰的值替換為 new_val
// 假設格式為 key=value& 或 key=value\0
void replace_param(char *str, const char *key, const char *new_val)
{
char *pos = strstr(str, key);
if (!pos) return;
pos += strlen(key); // 移至 '=' 後
if (*pos != '=') return; // 非精確匹配 key=
pos++; // 跳過 '='
char *end = pos;
while (*end && *end != '&') end++; // 找到值結束
// 計算尾部剩餘長度並移動
size_t tail_len = strlen(end);
size_t new_len = strlen(new_val);
memmove(pos + new_len, end, tail_len + 1); // 含 \0
memcpy(pos, new_val, new_len);
}
int main()
{
char url[] = "b221.html?a1=11.1&a2=22.2&a3=0";
replace_param(url, "a1=", "33.3");
replace_param(url, "a2=", "44.4");
printf("%s\n", url); // b221.html?a1=33.3&a2=44.4&a3=0
return 0;
}
libcurl 的 curl_url API)。strstr → strcasestr (POSIX)。