【发布时间】:2021-10-07 08:34:35
【问题描述】:
所以这个结构是按班级分配的,所以虽然有更简单的方法可以做到这一点,但这是我应该这样做的方式。所以结构需要保持完整。也就是说,我不能让这个打印成为我的行。
在 Geany 中它会说它编译成功,但是当我在控制台中运行它时,字符字符串是 'u????'而不是字符串。我对 C 中的结构相当陌生,所以我不太确定这件事在做什么。我曾尝试使用方括号来确定 char 数组的长度,就像你应该使用 C 一样,但它会告诉我删除它们。任何帮助将不胜感激。
#include <stdio.h>
typedef struct {
unsigned char name;
} MY_DATA;
void name (MY_DATA *n)
{
n->name = *"Kyle";
}
int main (void)
{
MY_DATA data;
name (&data);
printf ("My name is %s\n", &name);
}
【问题讨论】:
-
unsigned char name;是单个字符,不是以空字符结尾的字节字符串 -
我怀疑您需要 a good book 并投入一些时间来理解指针、字符串、数组等。您在此处犯的错误与 nothing 具体有关结构本身。仅供参考,将函数
name的地址发送到printf以获取%s格式说明符应该会在您的编译中点亮一些巨大的红色警告标志。打开所有警告并将它们视为错误,因为在这一点上,它们肯定就是它们的样子。 -
printf ("My name is %s\n", &name);尝试获取函数name (MY_DATA *n)的地址并将地址作为地址传递给字符串。 Kyle Campbell,为什么要尝试打印函数的地址? -
当然
typedef struct { unsigned char name; } MY_DATA;应该是typedef struct { unsigned char *name; } MY_DATA;(添加*)。 -
谢谢,但我解决了,typedef var 已更改为 char *name。主调用更改为 data.name = "Kyle"。并且 printf 更改为“%s”,data.name。感谢所有的帮助。