C:使用字符串数组时输出为空

6qfn3psc  于 2022-12-17  发布在  其他
关注(0)|答案(2)|浏览(263)

所以我试着用c语言为管理员创建一个用户名和密码,在这里的代码中数组inpstring的索引决定了用户名和密码,因为偶数(和0)是用户名,奇数是密码。

#include <stdio.h>
#include <string.h>

void Listofadmins(int index, char inpstring[][50]){
    if(index == 0){
        strcpy(inpstring[0], "Carl01");
        strcpy(inpstring[1], "SVm6u&N591s2");
    } else if(index == 1){
        strcpy(inpstring[2], "Devoth754");
        strcpy(inpstring[3], "eeKS7@8%0@T6");
    } else if(index == 2){
        strcpy(inpstring[4], "David439");
        strcpy(inpstring[5], "l$z7eqV2aD00");
    } else if(index == 3){
        strcpy(inpstring[6], "Matt208");
        strcpy(inpstring[7], "h9Je2#Ri3or$");
    }
}

void main()
    {
    int j, k = 0, y = 1;
    char str[100][100];
    for(j = 0, k, y; j < 4; j++, k += 2, y += 2){
        listofadmins(j, str[10]);
        printf("%s\n%s", str[k], str[y]);
    }
}

当我试着运行代码时,没有输出,只是空白。我以为listofadmins函数会将inpstring数组中的字符串复制到主程序数组str中。你知道问题出在哪里吗?

cyvaqqii

cyvaqqii1#

一些问题...
1.为此使用2D数组是有问题的。最好创建struct
1.在Listofadminsstrcpy中创建if/else梯形图是不必要的复杂操作
1.使用固定大小的char数组而不是char *会使事情变得复杂。
下面是一些简化的代码:

#include <stdio.h>
#include <string.h>

struct user {
    const char *user;
    const char *pw;
};

struct user users[] = {
    { "Carl01", "SVm6u&N591s2" },
    { "Devoth754", "eeKS7@8%0@T6" },
    { "David439", "l$z7eqV2aD00" },
    { "Matt208", "h9Je2#Ri3or$" }
};

int
main(void)
{

    for (size_t i = 0;  i < sizeof(users) / sizeof(users[0]);  ++i) {
        struct user *user = &users[i];
        printf("User: %s Pw: %s\n",user->user,user->pw);
    }

    return 0;
}

下面是程序输出:

User: Carl01 Pw: SVm6u&N591s2
User: Devoth754 Pw: eeKS7@8%0@T6
User: David439 Pw: l$z7eqV2aD00
User: Matt208 Pw: h9Je2#Ri3or$
yfjy0ee7

yfjy0ee72#

我更改了“listofadmins”的调用参数,以匹配“str”的声明,从而将inpstring[][50]转换为inpstring[][100]。在调用函数时,我删除了“str”后面的括号,因此将str[10]转换为str
生成的代码如下

#include <stdio.h>
#include <string.h>

void listofadmins(int index, char inpstring[][100]){
 if(index == 0){
     strcpy(inpstring[0], "Carl01");
     strcpy(inpstring[1], "SVm6u&N591s2");
 } else if(index == 1){
     strcpy(inpstring[2], "Devoth754");
     strcpy(inpstring[3], "eeKS7@8%0@T6");
 } else if(index == 2){
     strcpy(inpstring[4], "David439");
     strcpy(inpstring[5], "l$z7eqV2aD00");
 } else if(index == 3){
     strcpy(inpstring[6], "Matt208");
     strcpy(inpstring[7], "h9Je2#Ri3or$");
 }
}

void main()
{
int j, k = 0, y = 1;
char str[100][100];
for(j = 0, k, y; j < 4; j++, k += 2, y += 2){
    listofadmins(j, str);
    printf("%s\n%s", str[k], str[y]);
}
}

输出为:

Carl01
SVm6u&N591s2Devoth754
eeKS7@8%0@T6David439
l$z7eqV2aD00Matt208
h9Je2#Ri3or$

我可能会建议改变printf以获得更好的可读性。希望我能帮上忙。

相关问题