代码的目标是,如果用户插入一个大于X个字符的名称,我请求一个新名称,直到他插入一个带有或少于X个字符的名称。我有以下代码:
char * getName(){
int size = 4;
int i;
char inserted[10];
char name[4];
while (size > 3){
printf("Insert name, maximum 3 characters: ");
fgets(inserted, 10, stdin);
for (i=0; i<4; i++){
if (inserted[i] == '\n'){
size = 3;
}
}
}
sscanf(inserted,"%s", name);
return name;
}
但似乎它不起作用.....我试过调试但却找不到错误。如果你能伸出援助之手,那就太好了。
编辑:我编辑了代码,出现了错误
编辑:问题不在于是否返回值,但是函数是否处于无限循环中 - 似乎无法找到单词是否具有正确的长度
答案 0 :(得分:2)
编辑:
您无法从函数返回本地变量地址[name
]。您需要动态分配内存才能返回指针。您可以使用malloc()
之类的
char * name = NULL;
name = malloc(4);
然后,从main()
开始,您必须使用free()
内存。
旧答案:
首先,您必须将char name[3];
更改为char name[4];
,以便为终止空值腾出空间。
在您的代码中,更改
for (i=0; i<4; i++){
if (name[i] == "/n")
到
for (i=0; i<4; i++){
if (inserted[i] == '\n')
答案 1 :(得分:0)
您正在将字符串文字与字符进行比较。您应该将"\n"
更改为'\n'
,以便您比较字符。您还将返回指向局部变量的指针。您应该使用malloc返回在堆上分配的内存。