基本上,我试图增加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;
}
答案 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解决了这个问题,但我现在还没有把这本书放在我面前。如果你声明了一个数组,行为会有所不同。