将char*转换为int并转换回相同的char数组

Converting char* to int and converting back to the same char array

本文关键字:char 转换 数组 int      更新时间:2023-10-16

基本上,我正在尝试增加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解决这个问题,但我现在没有书在我面前。如果您声明了一个数组,则行为会有所不同。