我试图编写一个程序来查找2D数组中的第一个空白空间,并在该空间中添加一个自定义字符串。我尝试过在互联网上找到的一些东西,但似乎没有任何工作或符合我的具体情况。就是这样:
#include <stdio.h>
#include <string.h>
int tags[10] = {1,2,3,4,5};
char owners[10][10] = {"per1", "per2", "per3", "per4", "per5"};
int tagAdd;
char ownerAdd;
int i;
int addBool;
int j;
int len;
int main()
{
printf("Enter the tag ID you want to add: ");
scanf("%d", &tagAdd);
printf("Enter the tag owners name: ");
scanf("%d", &ownerAdd);
len = strlen(ownerAdd);
while (i<10)
{
if (tags[i] == 0)
{
tags[i] = tagAdd;
owners[i][len] = ownerAdd; //This is the part I can't figure out
addBool = 1;
}
if (addBool == 1)
{
break;
}
i++;
}
i = 0;
addBool = 0;
len = 0;
while (i<10)
{
printf("tag[%d]", tags[i]);
len = strlen(owners[i]);
printf(" is owned by ");
while (j < len)
{
printf("%c", owners[i][j]);
j++;
}
printf("\n\r");
i++;
j = 0;
}
}
答案 0 :(得分:0)
你不能这样做:
char ownerAdd;
scanf("%d", &ownerAdd);
len = strlen(ownerAdd);
您传递的是不正确的类型。 ownerAdd
是一个char
,scanf
期望%d
指向int
的指针,您正在传递指向char
的指针
scanf
转换值,它会溢出。并且strlen
期望char*
它指向一个有效的字符串(0终止)。你做错了。
这是正确的:
char ownerAdd[100];
scanf("%99s", ownerAdd);
len = strlen(ownerAdd);
替换值:
owners[i][len] = ownerAdd; //This is the part I can't figure out
也是错误的,因为owners[i]
是char[10]
,你必须这样做:
strncpy(owners[i], ownerAdd, sizeof owners[i]);
owners[i][sizeof(owners[i]) - 1] = 0;
复制字符串。
下一个错误是你没有初始化i
并做(第一个循环)
while (i<10)
{
...
}
这将失败。与j
相同,它是未初始化的。