【发布时间】:2016-01-10 05:17:24
【问题描述】:
当我在 C++ 中组合一个大写函数时,我注意到在 C 中我没有收到预期的输出。
C++ 函数
#include <iostream>
#include <cctype>
#include <cstdio>
void strupp(char* beg)
{
while (*beg++ = std::toupper(*beg));
}
int main(int charc, char* argv[])
{
char a[] = "foobar";
strupp(a);
printf("%s\n", a);
return 0;
}
按预期输出:
FOOBAR
C 函数
#include <ctype.h>
#include <stdio.h>
#include <string.h>
void strupp(char* beg)
{
while (*beg++ = toupper(*beg));
}
int main(int charc, char* argv[])
{
char a[] = "foobar";
strupp(a);
printf("%s\n", a);
return 0;
}
输出是缺少第一个字符的预期结果
OOBAR
有谁知道为什么在 C 中编译时结果会被截断?
【问题讨论】:
-
如果你真的想在
C++中这样做:std::transform(a, a + strlen(a), a, std::toupper); -
您能解释一下为什么您希望这会将字符串转换为大写吗?具体来说,您为什么希望
=的右侧在左侧之前被评估? -
感谢所有提供反馈和提供宝贵信息的人
-
@Schullz 我坚信从错误中吸取教训是避免再次犯同样错误的最有效方法。因此,由于这个问题完全源于实验,而不是在团队项目环境中,我认为编写这段代码 sn-p 开始是一个错误
-
@MillieSmith 在这种情况下,将哪个项目变为大写的顺序是否重要?无论如何,大多数(如果不是全部)改变字符串的经典 C++ 方法都使用
std::transform。
标签: c++ c string uppercase c-strings