动态长度的字符数组
Character Array of dynamic length
我写了一个C++函数,可以表示如下: 它所做的只是获取一个字符串(这是它崩溃的地方)并反转它。
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int main()
{
cout<<"Enter a string: "<<endl;
char *str;
gets(str);
cout<<"Reversed String is: ";
for(int i=strlen(str)-1;i>=0;i--)
cout<<(str[i]);
return 0;
}
我想存在某种内存访问违规。
任何线索为什么这不起作用?
错误:分段错误(核心转储)
在 c++ 中,通过algorithm
std::reverse
可以更轻松、更不容易出错地解决此问题。它也更容易使用std::string
.
#include <iostream>
#include <algorithm>
int main ()
{
std::string input;
std::cout << "Enter string to reverse: ";
std::cin >> input;
std::reverse(input.begin(),input.end());
std::cout << "Reversed string: " << input << std::endl;
return 0;
}
如果你必须通过char数组来做到这一点,试试这个(你甚至不需要动态内存分配)
#include <iostream>
#include <algorithm>
#include <cstring>
int main ()
{
char input[1024];
puts("Enter string to reverse: ");
fgets(input, 1024, stdin);
std::reverse(input, input + strlen(input));
printf("Reversed string: %s", input);
return 0;
}
你的代码不是 c++ 风格,我建议你看看 Filip (https://stackoverflow.com/a/45903067/4386427) 的答案
我将只解决您的代码出了什么问题。
当你这样做时
char* str;
你得到的只是一个指针,可以指向一个char
.你拿着char
没有任何记忆.此外,指针变量的值str
未初始化。
所以当你这样做时
strlen(str)
您读取一个未初始化的变量,并尝试将此未初始化的值视为 C 样式字符串。这是未定义的行为,很可能导致程序崩溃。
在使用之前,您需要确保str
已初始化。由于您需要动态内存,因此可以执行以下操作:
char *str;
str = new(char[100]); // Initialize str to point to a dynamic allocated
// char array with size 100
...
...
delete(str);
但同样 - 我不会在 c++ 代码中使用这种风格
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?