C strcpy和strcat

C strcpy和strcat,c,strcpy,strcat,atoi,C,Strcpy,Strcat,Atoi,我有一个关于strcpy和strcat的问题 在这个项目中,我试图让我得到一个人出生的年份。财政代码以串行端口的字符形式给出 strcpy(temp, code[6]); strcat(temp, code[7]); yyyy = 1900 + (atoi(temp)); 这就是我的想法:基本上,一年的最后两位数将被加到1900(我知道这对2000年出生的人来说不太合适)。 使用strcpy将第一个数字从完整代码复制到临时变量,然后我想添加第二个数字,然后使用atoi并将所有内容转换为整数;为

我有一个关于strcpy和strcat的问题

在这个项目中,我试图让我得到一个人出生的年份。财政代码以串行端口的字符形式给出

strcpy(temp, code[6]);
strcat(temp, code[7]);
yyyy = 1900 + (atoi(temp));
这就是我的想法:基本上,一年的最后两位数将被加到1900(我知道这对2000年出生的人来说不太合适)。
使用strcpy将第一个数字从完整代码复制到临时变量,然后我想添加第二个数字,然后使用atoi并将所有内容转换为整数;为此,我以一种我从未见过的方式使用strcat。我做得对吗

无需
strcpy
/
strcat
(在这种情况下,它们并不合适)。也不需要临时字符串。您可以这样做:

yyyy = 1900 + (code[6] - '0') * 10 + (code[7] - '0');

这只是提取两位字符,将每个字符转换为0..9范围内的整数,然后根据这两个值计算年份。

不需要strcpy/
strcat
(在这种情况下,它们并不合适)。也不需要临时字符串。您可以这样做:

yyyy = 1900 + (code[6] - '0') * 10 + (code[7] - '0');


这只是提取两个数字字符,将每个字符转换为0..9范围内的整数,然后根据这两个值计算年份。

如何声明
code
?什么是
code
?什么是
temp
?这不是小事,这是“工作正常”和“未定义的行为”之间的区别。您需要显示更多的代码以获得与某些测试结果相关的帮助。以防万一,
code
是一个C字符串(
char[]
),请注意,
strcpy
strcat
都需要
char*
操作数,并且您正在传递
char
。。。i、 e.未定义的行为。
code
如何声明?什么是
code
?什么是
temp
?这不是小事,这是“工作正常”和“未定义的行为”之间的区别。您需要显示更多的代码以获得与某些测试结果相关的帮助。以防万一,
code
是一个C字符串(
char[]
),请注意,
strcpy
strcat
都需要
char*
操作数,并且您正在传递
char
。。。i、 e.未定义的行为。^^lol。无论如何,实际上不允许编写代码——这太复杂了。在C和C++中,只能使用库函数来处理字符串:相关的标准要求0到9的字符是连续的和有序的,所以这种技术适用于ASCII和EBCDIC,以及其他任何东西。@流形:实际上标准(C和C++)都保证了连续的数字。(对于C,第5.2.1节第3段,“上述十进制数字列表中0后的每个字符的值应比前一个字符的值大一个。”字母不一定是连续的。但我承认,每当我看到“字符算术”时,我也会退缩就像那样,如果源字符集!=执行字符集,我不能100%确定交叉编译会发生什么;-@DevSolar感谢引用该子句@马丁詹姆斯:这太糟糕了,我应该用“低级幽默”来形容它哈哈。无论如何,实际上写代码是不允许的——太复杂了。在C和C++中,只能使用库函数来处理字符串:相关的标准要求0到9的字符是连续的和有序的,所以这种技术适用于ASCII和EBCDIC,以及其他任何东西。@流形:实际上标准(C和C++)都保证了连续的数字。(对于C,第5.2.1节第3段,“上述十进制数字列表中0后的每个字符的值应比前一个字符的值大一个。”字母不一定是连续的。但我承认,每当我看到“字符算术”时,我也会退缩就像那样,如果源字符集!=执行字符集,我不能100%确定交叉编译会发生什么;-@DevSolar感谢引用该子句@马丁詹姆斯:这太糟糕了,我应该用“低级幽默”来形容。)