簡體   English   中英

strcpy返回的錯誤沒有響應窗口

[英]Error in strcpy return not responding window

此代碼是制作簡單詞典的起點。 我試圖將單詞和含義插入數組。 似乎是什么問題?

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

main(){
    char alp, *a[5][1], item[100],item2[150];
    for (int i =1;i <=5 ; i++){
        printf("\n\nEnter item [%d][%d]:",i,0);
        scanf("%s",&item);
        printf("Enter item meaning [%d][%d]:",i,0);
        scanf("%s",&item2);
        strcpy(a[i][0],item); //program stops here
        strcpy(a[i][1],item2);
        printf("word %s \nmeaning: %s",a[i][0],a[i][1]);
    }
  }

您的循環應如下所示:

for (int i =1;i <5 ; i++){

注意<而不是<= 如果聲明一個大小為5的數組,則最后一個元素在索引4處。

另外,將a初始化為a[5][2][100]而不是*a[5][1]

這個給你

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

#define N   5

int main( void )
^^^^^^^^^^^^^^^^
{
    char a[N][2][150], item[150], item2[150];
         ^^^^^^^^^^^^

    for ( int i = 0; i < N ; i++ )
          ^^^^^^^^^^^^^^^^^^^^^^
    {
        printf( "\n\nEnter item [%d][%d]: ", i, 0 );
        scanf( "%s", item );
                     ^^^^
        printf( "Enter item meaning [%d][%d]: ", i, 1 );
        scanf( "%s", item2 );
                     ^^^^^
        strcpy( a[i][0], item );
        strcpy( a[i][1], item2 );

        printf("word %s \nmeaning: %s\n", a[i][0], a[i][1] );
    }
}

這個宣言

char *a[5][1];

聲明一個多維數組的指針。 您需要保留將字符串復制到的內存。

數組的索引從0開始。

您還沒有初始化中的值a數組,這樣你就不能使用它們。 調用strcpy ,您將a[0][0]作為要復制數據的地址傳遞給它-但它尚無特定值,因為尚未將其設置為任何值。 因此,您要求strcpy將字符串特別復制到任何地方。

在嘗試使用變量的值之前,必須為其分配一個值。 在嘗試使用指針的值之前,必須先將其指向某個對象。

您可以這樣做:

a[i][0] = strdup (item);

strdup函數分配內存並將字符串復制到該內存中,並返回指向該內存的指針。 此后, a[i][0]將指向該新分配的包含字符串副本的內存。

如果您的平台不提供strdup ,則可以輕松編寫代碼:

char *strdup (const char * i)
{
    char *j = malloc (strlen(i) + 1);
    if (j == NULL)
        return NULL;

    strcpy (j, i);
    return j;
}

您還可以訪問數組末尾的數組。 您的數組只有五個具有索引0、1、2、3和4的對象。因此,使用索引5也是非法的。

最后,在scanf調用中,傳遞字符數組的地址,如下所示: scanf("%s",&item); 由於item是一個數組,它將衰減到其第一個元素的地址,這就是您想要的。 您不需要數組的地址,因此&是不正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM