【问题标题】:How to collect variables with strcpy如何使用 strcpy 收集变量
【发布时间】:2014-05-22 16:49:15
【问题描述】:

我在收集变量时遇到了一些问题..

我当前的代码:

strcpy (date, year);
strcat (date, "-");
strcat (date, month);
strcat (date, "-");

printf("%s" , date);

因此,我希望有 2014-04 作为示例,但目前它给了我 2014-042014-04-

所以由于某种原因它打印了两次。有人知道怎么回事吗?

【问题讨论】:

  • 这里没有足够的信息。请说明如何分配和初始化日期、年份和月份。
  • Null 终止你的字符串是你的朋友en.wikipedia.org/wiki/Null-terminated_string
  • 同上关于缺乏信息。可能的问题包括:日期太小、月份未以 null 终止。
  • 他们在 {char *year} 和 {char *month} 后用户给他们和 char date[64] 收集他们
  • @hyde:这不是strcat的工作方式。 OP 使用了正确的语法,所以问题出在代码未显示。

标签: c strcpy


【解决方案1】:

您可以通过让printf 完成工作而不是尝试自己组装字符串来消除此问题:

int year = 2014;
int month = 4;
printf("%04i-%02i", year, month);

一般来说,使用strcat 不是一个好主意。它容易出现缓冲区溢出,并且在较新版本的 C 标准中已被弃用。使用printf 意味着您不需要中间的date 缓冲区,避免了与缓冲区溢出、缺少NULL 终止等相关的问题。

如果您希望将结果保存在变量中而不是将其打印出来,只需将 printf 替换为 snprintf

char buffer[BUFFER_LEN] = {0};
snprintf(buffer, sizeof(buffer), "%04i-%02i", year, month);

【讨论】:

  • 这可以在其他方面工作,但我正在尝试收集新变量并使用它从数据库中搜索..抱歉没有提到它:/
  • @user3665673 请注意,虽然此(更新版本)可能会很好地“修复”您的代码以产生正确的输出,但您似乎有重叠的字符串,或者没有正确以 nul 结尾的字符串.让您的原始代码也能正常工作是个好主意,即使您也将代码更改为使用snprintf,如下所示(这也很好)。
  • 使用 strcat() 有时会导致问题,但在任何版本的 C 标准中都不会被弃用。
  • 我认为 C11 已弃用 strcat 以支持 strcat_s。我一定是记错了。
猜你喜欢
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
相关资源
最近更新 更多