【发布时间】:2021-11-02 07:35:23
【问题描述】:
目标是将字符串litteral的地址存储在char*中,它是struct的成员 ID。我考虑过使用数组。 数组的问题是,如果我将最大字符数设置为 7,用户 可能输入小于7,所以会浪费内存。 使用 getchar() 的好处是我可以将 char 的最大值设置为 7,但如果用户输入较少,那也没关系。
typedef struct id
{
int age;
char* name;
}id;
id Mary;
char L;
int c =0;
printf("Enter your age: ");
scanf("%d",&Mary.age);
printf(" Enter your name: );
if( (L=getchar() != '\n' )
{
// stroring string litteral in char*
}
printf("%s", Mary.name);
【问题讨论】:
-
我不太明白您的问题是什么,但您需要在某处收集数据。目前你不这样做,所以你会得到内存故障。不同寻常的是,您会收集到某个大小 char[256] 的本地堆栈变量/数组中,然后在知道大小后将其分配 & strcpy 到您的最终结构。
-
这个问题的问题是你使用了“字符串文字”这个词。用户输入是字符串variable,而不是literal。 en.wikipedia.org/wiki/Literal_(computer_programming)。这让你很不清楚你实际上在问什么。
-
是的,谢谢
-
旁白:“字面意思”是指某物在其自身的文本中进行了描述。字符串文字
"abc"包含字符 a、b 和 c,因为这些字母位于字符串文字的源文本中。char *name;不是文字,因为我们将在name中存储任意字符,而不是其文本中的字符 n、a、m 和 e。它只是一个字符串,而不是字符串文字。