【发布时间】:2022-09-27 15:58:39
【问题描述】:
用名称字符串替换 {{name}}。
代码正在运行,只是没有显示任何输出。
我使用 vs code 和 mingw 编译器
我无法弄清楚为什么会发生这种情况,我只是想研究自己的逻辑而不是查看解决方案,如果我使用的逻辑完全错误,请指导我
#include <stdio.h>
#include <conio.h>
#include <string.h>
void func(char *string, char *name, char *outlet, char *item)
{
for (int i = 0; i < strlen(string); i++)
{
if (string[i] == \'{\')
{
if (string[i + 2] == \'n\')
{
int n = i;
for (int k = 0; k < strlen(name) - 8; k++)
{
for (int l = strlen(string); l >= 15; l--)
{
string[l + 1] = string[l];
}
}
for (int j = 0; j < strlen(name); j++)
{
string[n] = name[j];
n++;
}
i = i + strlen(name);
continue;
}
if (string[i + 2] == \'i\')
{
continue;
}
if (string[i + 2] == \'o\')
{
continue;
}
}
}
}
int main()
{
FILE *ptr = NULL;
char string[80] = \"thanks {{name}} for purchasing {{item}} from our outlet {{outlet}}\";
char name[50] = \"tushar\";
char item[80] = \"laptop\";
char outlet[50] = \"meerut\";
/*ptr = fopen(\"file.txt\",\"r+\");
fscanf(ptr,\"%[^\\n]s\",string);
printf(\"the content of this file has %s\\n\",string);*/
func(string, name, outlet, item);
printf(\"%s\\n\", string);
// fputs(str,ptr);
// fclose(ptr);
return 0;
}
-
我认为您最好根据您的模板字符串创建一个新字符串,因为字符串的长度可能会发生变化,因为您的所有标记都长于 6 个字符,这是您要插入的字符串的长度。只需逐个字符地复制字符串,直到找到 { 然后在找到时替换并恢复复制 }
-
该代码有几个实例未定义的行为其索引为
string[i + 2]等,可以超出string的范围。 -
避免包含
conio.h(您的代码不需要它)。当你包含古老的 DOS 头conio.h时,你的代码 100% 不可移植到 DOS/windows 以外的任何地方(当然在这里,它可以简单地删除) -
@AndersK 是的,让我试试。谢谢哥们!
-
@WeatherVane 但它只会在
string[i] == \'{\'时触发,您能否详细说明或更正我的代码,这意味着很多。
标签: c