将char*转换为int并转换回相同的char数组
Converting char* to int and converting back to the same char array
基本上,我正在尝试增加port
的int值。这应该很容易,但我有点卡住了。
它编译得很好,但运行时出现了以下错误:访问违规写入位置0x001f5834
#include "stdafx.h"
#include "iostream"
using namespace std;
#define TESTING "5002"
int main()
{
char* port = TESTING;
int portint;
sscanf ( port, "%d", &portint );
portint++;
cout << portint << endl; // it works fine up to here, it prints 5003
sprintf ( port, "%d", portint);
return 0;
}
默认情况下,编译器将字符串文本视为不可变的,试图修改其中一个文本的内容会在运行时导致访问冲突错误,因为这些字符串被放入代码段中,并且是只读的。在您的情况下,TESTING是一个字符串文字,您不能不更改它的值。尝试:
char port[] = "5002";
同时,编译器应该对此发出警告:当您将常量char*类型分配给char*类型时。
MS C++编译器有一个编译器选项将此视为:Zc:strings。
您正试图将"5003"写回"5002"。"5002"是字符串文字,无法写入。
我会尽量为这个问题找一个好的副本,因为它已经被问了很多次了。
在您的使用中,"5002"变成了一个静态的字符数组,因此不能修改。我相信K&R解决这个问题,但我现在没有书在我面前。如果您声明了一个数组,则行为会有所不同。
相关文章:
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将函数参数"const char*"转换为"std::string_view"是
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- C++:将模板类型 char 转换为 std::string
- strcmp/char* 转换无法按预期工作
- C++中的SQLite char*转换
- 无法从 const char* 转换为 const char *&
- 在 C++ 中将 char 转换为 int,而无需符号位传播
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 试图使用strCMP时的char转换错误
- 无法从'const char *'转换为'LPCTSTR'
- 将 std::vector<char> 转换为字符* 会导致字符缺陷
- 使用 static_cast 将 char 转换为 int c++
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 无法将const char转换为字符串构造字符串