在C中向二维数组添加字符串

时间:2018-02-09 19:49:32

标签: c arrays

我试图编写一个程序来查找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;
   }

}

1 个答案:

答案 0 :(得分:0)

你不能这样做:

char ownerAdd;

scanf("%d", &ownerAdd);
len = strlen(ownerAdd);

您传递的是不正确的类型。 ownerAdd是一个charscanf 期望%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相同,它是未初始化的。