C 如何用一个字符替换多字符字符常量
我试图用C中的“|”替换“%7C”,但收到一个多字符常量警告。我想知道是否有可能做到这一点,如果有,如何做到?我试图使用下面的代码,但它给出了此警告 Parse.cC 如何用一个字符替换多字符字符常量,c,string,C,String,我试图用C中的“|”替换“%7C”,但收到一个多字符常量警告。我想知道是否有可能做到这一点,如果有,如何做到?我试图使用下面的代码,但它给出了此警告 Parse.c 多字符常量不可移植,通常应避免使用。您的代码属于“常规”类别 问题的部分解决方案是使用strncmp进行字符串比较: 但是,您还需要卸下7C。这需要更多的环手术: int tgt = 0; int len = strlen(newCommand); for (int src = 0; src < len; src++) {
多字符常量不可移植,通常应避免使用。您的代码属于“常规”类别 问题的部分解决方案是使用strncmp进行字符串比较: 但是,您还需要卸下7C。这需要更多的环手术:
int tgt = 0;
int len = strlen(newCommand);
for (int src = 0; src < len; src++)
{
if (newCommand[src] == '+')
{
newCommand[tgt++] = ' ';
}
else if (strncmp(newCommand[i], "%7C", 3) == 0)
{
newCommand[tgt++] = '|';
src += 2;
}
else
newCommand[tgt++] = newCommand[src];
}
newCommand[tgt] = '\0';
这会立即泄漏分配的内存。可能您需要使用strdup或:
下一行:
newCommand = strtok(NULL, "/run?command= ");
拆分常量字符串中任意字符的任意序列;它不寻找那个字符串。如果要查找字符串,则需要使用strstr,可能需要首先运行strtok,以获得正确的起点,可能是newCommand=strtokNULL,然后是char*end=strstrnewCommand,/run?command=;-并检查返回的空指针
对于修改后的分配,您需要一个新符号来记录strtok返回的指针,例如char*token
总而言之,您的代码需要做大量的工作。据我所知,'%7C'不是有效字符。这是一个由三个字符组成的字符串。原因是我正在实现一个HTTP服务器,当用户输入时,它会返回到%7cT,这是完全可以理解的。%7C是“|”字符的URL编码版本。但是,您需要意识到您正在用单个字符替换子字符串。这样做的逻辑将比简单的赋值更复杂。旁白::您正在不必要地分配内存并在下一行覆盖它,从而导致内存泄漏。@BretHasel是的,有一种方法可以做到这一点。它被称为非编码。如果您是自己实现的,则需要编写一个算法,用字符替换输入的子字符串。您只关心|字符,还是需要对所有可能的字符进行常规的非编码?
int tgt = 0;
int len = strlen(newCommand);
for (int src = 0; src < len; src++)
{
if (newCommand[src] == '+')
{
newCommand[tgt++] = ' ';
}
else if (strncmp(newCommand[i], "%7C", 3) == 0)
{
newCommand[tgt++] = '|';
src += 2;
}
else
newCommand[tgt++] = newCommand[src];
}
newCommand[tgt] = '\0';
char *newCommand = (char *)malloc(sizeof(char)*35);
newCommand = strtok(command, " ");
char *newCommand = malloc(strlen(command) + 1);
if (newCommand == NULL) …report error and bail out…
strcpy(newCommand, command);
newCommand = strtok(NULL, "/run?command= ");