首页 > 解决方案 > 为 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;
}

标签: cpointerschar

解决方案


问题是您正在尝试修改字符串文字 ( host)。字符串文字是const,因此试图修改一个是未定义的行为。

由于port指向字符串文字中的字符之一,因此尝试通过执行以下操作修改该值:

*port = 0;

导致未定义的行为,在您的情况下,崩溃。

一种解决方法是简单地制作host一个数组char

char host[] = "127.0.0.1:1234";
char *port = strchr(host, ':');

由于声明已更改为 for 数组,因此该数组中的host所有字符都可以修改。


推荐阅读