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

时间:2014-04-17 20:19:54

标签: c++ c

基本上,我试图增加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;
}

3 个答案:

答案 0 :(得分:2)

默认情况下,编译器将字符串文字视为不可变,并且尝试修改一个文件的内容会导致运行时出现访问冲突错误,因为这些字符串被放入代码段,并且它是只读的。在您的情况下,TESTING是一个字符串文字,您不能更改其值。试试:

 char port[] = "5002";

同时,编译器应该对此发出警告:当你将char char *类型赋给char *类型时。

MS C ++编译器有一个编译器选项:Zc:strictStrings

答案 1 :(得分:0)

您正在尝试将“5003”写回“5002”。 “5002”是一个字符串文字,无法写入。

我会尝试为这个问题找到一个好的副本,因为它已经多次被问到了。

答案 2 :(得分:0)

在您的使用中,&#34; 5002&#34;成为一个静态的字符数组,因此无法修改。我相信K&amp; R解决了这个问题,但我现在还没有把这本书放在我面前。如果你声明了一个数组,行为会有所不同。