【发布时间】:2016-10-12 15:11:33
【问题描述】:
我现在只是在学习 C 中的指针,我对它们在我的代码中的工作方式感到困惑:
#include <stdio.h>
#include <string.h>
#define MAX_ARR 64
#define MAX_STR 32
typedef enum { COMEDY, DRAMA, HORROR, SCIFI
} GenreType;
typedef struct {
char title[MAX_STR];
char director[MAX_STR];
int year;
GenreType genre;
} MovieType;
void initMovie(char*, char*, int*, GenreType, MovieType*);
void printMovies(MovieType*, int);
void readString(char*);
void readInt(int*);
int main()
{
MovieType movie;
MovieType movieArr[MAX_ARR];
MovieType *pMovie;
char t = movie.title;
int arrSize = 0;
printf("Please enter the tile of the movie: ");
readString(t);
printf("The title of the movie is: %c\n", (t));
return 0;
}
void initMovie(char *t, char *d, int *y, GenreType gentype, MovieType *movType)
{
}
void readString(char *str)
{
char tmpStr[MAX_STR];
fgets(tmpStr, sizeof(tmpStr), stdin);
tmpStr[strlen(tmpStr)-1] = '\0';
strcpy(str, tmpStr);
}
void readInt(int *x)
{
char str[MAX_STR];
readString(str);
sscanf(str, "%d", x);
}
我试图让用户填写电影类型的所有数据,例如title、director、year 它出来了等等。如您所见,我当前的方法产生了一个@ 987654325@,很明显我做错了什么。 main 函数之外的所有内容都不能更改,initMovie 函数和 printMovies 函数除外(尚未制作)。
任何提示和指示,双关语,将不胜感激!让我知道我做错了什么以及如何解决它!
【问题讨论】:
-
语句
tmpStr[strlen(tmpStr)-1] = '\0'没有意义,strlen通过搜索 0 来计算字符串的长度,然后在已经有 1 的地方放置一个 0。也许你的意思是tmpStr[MAX_STR-1] = '\0'? -
那不是我做的,而是教授做的。我无法改变它
-
@KarstenKoop 实际上它正在剥离 fgets() 将存储的尾随
\n。所以它确实是有道理的,尽管它很丑。 -
请不要破坏自己的帖子。
-
char t = movie.title;是一个错误。您的编译器应该对此有所说明。在运行程序之前修复编译器报告的所有消息非常重要。
标签: c pointers pass-by-reference