[英]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.