gpt4 book ai didi

不能和可以更新字符串指针变量

转载 作者:行者123 更新时间:2023-11-30 16:46:01 24 4
gpt4 key购买 nike

当我从键盘获取字符串时,程序按预期工作,我可以更新字符串的内容:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char *cards;
cards = malloc(256);
fgets(cards, 256, stdin);
char a_card = cards[2];
cards[2] = cards[1];
cards[1] = cards[0];
cards[0] = cards[2];
cards[2] = cards[1];
cards[1] = a_card;
puts(cards);
return 0;
}

但是当我将字符指针设置为字符串文字时,程序崩溃了。我删除了第 x 行到第 y 行,然后程序运行了。我知道 char 指针无法更新。但是为什么从键盘读取的时候可以更新呢?

int main()
{

char *cards;
cards = malloc(256);
cards = "JQK";
char a_card = cards[2];
cards[2] = cards[1]; // line x
cards[1] = cards[0];
cards[0] = cards[2];
cards[2] = cards[1];
cards[1] = a_card; // line y
puts(cards);
return 0;
}

最佳答案

cards = malloc(256) ; 将等于内存位置的变量 cards 分配给堆中新分配的内存。下一行 cards = "JQK"; 将变量 cards 更新为很可能位于程序字符串表内部的某个内存位置,该位置(通常)无法修改。然后,cards[2] = cards[1]; 行尝试更新字符串表中的位置,即 cards 指向的位置之后的两个字符。这就是导致崩溃的原因。

关于不能和可以更新字符串指针变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43906077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com