字符没有显示[C]

时间:2016-02-23 08:10:37

标签: c

我正在制作一个有趣的小型基于文本的游戏,因为某些原因,某些文字没有显示用户名。

这是我的代码:

#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!

2 个答案:

答案 0 :(得分:3)

有几件事:

  • 您的主要功能应该有不同的签名。
  • 考虑将您的内存分配到更高级别,以便在较低级别可用 程序的级别。
  • 在c中修改缓冲区时,也要传递它们的大小。
  • 具有void返回值的函数不会返回任何内容。

解决这些问题后,您的错误就会消失。

#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分配中的空格看起来就像您要找的那样。