c - 为 char* 变量分配新值时访问冲突
问题描述
我正在测试以下代码,但是当执行时,这一行中出现了一个 AV:
*port = 0;
如何解决这个问题?我做错了什么?
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
char *host = "127.0.0.1:1234";
char *port = strchr(host, ':');
if (port)
{
*port = 0;
++port;
printf("%s \n", *port);
int portInt = strtol(port, NULL, 10);
printf("%d: \n", portInt);
}
getchar();
return 0;
}
解决方案
问题是您正在尝试修改字符串文字 ( host
)。字符串文字是const
,因此试图修改一个是未定义的行为。
由于port
指向字符串文字中的字符之一,因此尝试通过执行以下操作修改该值:
*port = 0;
导致未定义的行为,在您的情况下,崩溃。
一种解决方法是简单地制作host
一个数组char
:
char host[] = "127.0.0.1:1234";
char *port = strchr(host, ':');
由于声明已更改为 for 数组,因此该数组中的host
所有字符都可以修改。
推荐阅读
- c++ - 使用 -O1 优化标志编译项目时共享库崩溃
- bash - 在开始新的子进程之前等待子进程完成
- shell - 如何从shell中的十六进制字符串获取反十六进制字符串
- string - 朱莉娅的独特对
- java - 我厌倦了用 JpaRepository 做一些事情但是找不到用 findById 的行,
- python - 如何根据数据帧的长度在数据帧中创建额外的列作为索引值
- jquery - 单击提交按钮时如何检查序列化数据是否为空
- android - 使用 URL Google Android 将图像发送到 Firebase 存储
- node.js - 如何为我的 GraphQL docker 容器提供服务?
- javascript - 如何将 JSON 对象从快递服务器发送到下一个 js 页面?