字符数组和指针C++
char array and pointer C++
这是我的程序。char s3[2] = "q" 的输出是 "QC++",而它应该只是 "Q"。我想我必须重置指针,但我不确定如何重置。
void myToUpperCase(const char *source, char *dest){
for(int i = 0; *(source + i) != ' '; i++)
{
*(dest + i) = toupper(*(source + i));
}
}
char s2[20] = "#c++";
char s3[2] = "q";
char result[20];
myToUpperCase(s2, result);
cout << "- s2 ("" << s2 << "") myToUpper() -> " << result << " => " << ((strcmp(result, "#C++") == 0) ? "correct.n" : "INCORRECT.n");
myToUpperCase(s3, result);
cout << "- s3 ("" << s3 << "") myToUpper() -> " << result << " => " << ((strcmp(result, "Q") == 0) ? "correct.n" : "INCORRECT.n");
当你转换数组时,你会在终止 null 时终止循环,这不会被复制,所以当你打印转换后的字符串时,它会继续打印内存的内容,直到遇到第一个随机 0。这就是你得到垃圾的原因。尝试以下更改:
#include <iostream>
#include <cctype>
#include <cstring>
void myToUpperCase(const char *source, char *dest)
{
while ((*dest++ = std::toupper(static_cast<unsigned char>(*source++))) != ' ');
}
int main()
{
char s2[20] = "#c++";
char s3[2] = "q";
char result[20];
myToUpperCase(s2, result);
std::cout << "- s2 ("" << s2 << "") myToUpper() -> " << result << " => " << ((std::strcmp(result, "#C++") == 0) ? "correct.n" : "INCORRECT.n");
myToUpperCase(s3, result);
std::cout << "- s3 ("" << s3 << "") myToUpper() -> " << result << " => " << ((std::strcmp(result, "Q") == 0) ? "correct.n" : "INCORRECT.n");
}
https://ideone.com/lj1HC5
- s2 ("#c++") myToUpper() -> #C++ => correct.
- s3 ("q") myToUpper() -> Q => correct.
while 循环在到达"\0"时终止,只有这次终止 null 已被复制。
您可以在调用 myToUpperCase 以准备缓冲区之前调用 memset。 这通常是有帮助的。
void * memset ( void * ptr, int value, size_t num );
所以。。。
memset(result, 0, 20);
你应该使你的函数返回一个指向字符串的指针,并在函数中创建指针dest并返回它,就像这样你有一个情况:函数的第一次调用完成,dest 是 "#C++",然后再次调用它,只是用 Q 替换 #
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错