我正在制作一个有趣的小型基于文本的游戏,因为某些原因,某些文字没有显示用户名。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
/* Forward declarations -- Prototypes */
void askCharacterName(char *name);
void printMainMessage(char* name);
int main(char* username) {
askCharacterName(username);
char* temp;
temp = &username;
printMainMessage(temp);
return (0);
}
void askCharacterName(char *name) {
char username[20];
printf("What is your desired username?");
scanf("%s", &username);
return *username;
}
void printMainMessage(char *name) {
printf("Hello %s. Welcome to Lamescape!\n", name);
}
这是我的输出:
Welcome []. Welcome to Lamescape!
答案 0 :(得分:3)
有几件事:
解决这些问题后,您的错误就会消失。
#include <stdio.h>
#include <stdlib.h>
/* Forward declarations -- Prototypes */
void askCharacterName(char *name, unsigned size);
void printMainMessage(char* name, unsigned size);
int main()
{
char namebuffer[100];
askCharacterName(namebuffer, 100);
printMainMessage(namebuffer, 100);
return 0;
}
void askCharacterName(char *name, unsigned size)
{
printf("What is your desired username?");
scanf("%s", name);
}
void printMainMessage(char *name, unsigned size)
{
printf("Hello %s. Welcome to Lamescape!\n", name);
}
传递大小对此没有立即影响。我让你了解如何确保缓冲区永远不会超出其范围。
答案 1 :(得分:0)
username
中的askCharacterName
在程序堆栈中有其内存内容。
void askCharacterName(char *name) {
char username[20];
printf("What is your desired username?");
scanf("%s", &username);
return *username;
}
在username
中为main
分配堆中的空格看起来就像您要找的那样。