gpt4 book ai didi

无法将字符串文字分配给 C 中的字符数组

转载 作者:行者123 更新时间:2023-12-03 07:51:13 24 4
gpt4 key购买 nike

我正在尝试将字符串文字分配给字符数组。

这段代码工作正常

#include <stdio.h>

struct student
{
char* name;
};

struct student s[2];

void main()
{
s[0].name = "jason";
s[1] = s[0];

printf("%s%s", s[0].name, s[1].name);

s[1].name = "fedin";

printf("%s%s", s[0].name, s[1].name);
}

但是这段代码不起作用:

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

struct item {
char* itemName;
int quantity;
float price;
float amount;
};

void readItem(item* const p) {
printf("Please enter item name. \n");
fgets(p->itemName, 50, stdin);
for (int i = 0; i < strlen(p->itemName); i++)
{
if (p->itemName[i] == '\n') {
p->itemName[i] = NULL;
}
}

printf("Please enter the quantity. \n");
scanf_s("%d", &p->quantity);

printf("Please enter the price. \n");
scanf_s("%f", &p->price);
}

void print(item* const p) {
printf("Item Name: %s \n", p->itemName);
printf("Quantity: %i \n", p->quantity);
printf("Price: %.4f \n", p->price);

p->amount = (p->quantity) * (p->price);
printf("Amount: %.4f \n", p->amount);
}

int main(void) {
struct item item1;

item1.itemName = "SDfsd";

item1.quantity = 0;
item1.price = 0.0;
item1.amount = 0.0;

struct item* itemP = &item1;

readItem(itemP);
print(itemP);

free(itemP->itemName);
itemP->itemName = NULL;

return 0;

}

编译器给我的错误:

Error (active)  E0513 a value of type "const char *" cannot be assigned to an entity of type "char *" Structure Pointers and Functions  F:\Mohamed Taha\Codes\C Programming\C Programming For Beginners\vs\Structure Pointers and Functions\Structure Pointers and Functions\mian.cpp 41  

像往常一样,我尝试先询问 ChatGPT,但它没有向我提供任何解释。它说错误是因为字符串文字位于只读内存中,因此您无法写入它们,但这没有任何意义,因为第一个代码可以工作。

注意:两段代码在同一个编译器上运行。

最佳答案

由于struct item不是typedef,因此函数参数应在前面加上struct关键字;否则无法识别item

void readItem(struct item* const p)
void print(struct item* const p)

另请注意,NULL 扩展为 ((void *)0),它不是 char。如果要设置空终止符,则需要在此处使用 '\0'0:

p->itemName[i] = NULL; // Should be = '\0' or 0

是的,C 不会为 itemName 本身分配内存,因此请使用 malloc:

p->itemName = (void *)malloc(sizeof(char) * 50);
printf("Please enter item name. \n");
.
.

现在,它运行良好:

Please enter item name. 
test
Please enter the quantity.
3
Please enter the price.
2
Item Name: test
Quantity: 3
Price: 2.0000
Amount: 6.0000

关于无法将字符串文字分配给 C 中的字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77116140/

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