在C程序中使用sprintf()

时间:2014-09-29 01:02:21

标签: c printf

当我在我的C程序中使用此方法时,字符串不会打印到缓冲区。我尝试通过在%s的中间加一个\来修复它,但这不适用于我需要的东西。

char *replace_str(char *str, char *orig, char *rep)
{
  static char buffer[1000];
  char string[100];
  char *p;

  if(!(p = strstr(str, orig)))
    return str;

  p = strstr(str, orig);
  buffer[p-str] = '\0';
  strncpy(buffer, str, p-str); 
  strcpy(string, buffer);
  strcat(string,rep);
  printf("%s\n", string);
  sprintf(buffer, "%s%s", string, p+strlen(orig));
  return buffer;
}

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:0)

从函数replace_str()的名称开始,我将假设你想要在子串str之前取字符,附加替换字符串,然后在后面附加字符。

问题是p + strlen(orig)。由于p已分配strstr(str, orig),因此它将指向orig中的字符串。除非在str的第一个位置找到此字符串orig,否则将orig字符串的长度添加到p将指向orig中的字符串。

你想要的是:

sprintf(buffer, "%s%s", string, p+strlen(str));

这会将p指向原始字符串中str之后的第一个字符。