我正在嘗試輸入名稱并將它們保存在指標中。然后從我之前在輸入中留下的最后一個索引開始添加更多客戶。但我做對了。有小費嗎?對不起,把所有的代碼都放在一起只是為了更好地理解。
#include<stdio.h>
#define SIZE 50
int main(){
int x;
char name[SIZE][SIZE];
char *namePtr[SIZE][SIZE];
printf("enter no of customers ");
scanf("%d", &x);
puts("enter customer names");
for(size_t i = 0, j = 0; i < x; i, j){
scanf("%s", &name[i][j]);
namePtr[i][j] = &name[i][j];
}
puts("\nPrinting using pointer\n");
for(size_t i = 0, j = 0; i < x; i, j){
printf("%s ", &*namePtr[i][j]);
}
puts("\n");
int c;
printf("2nd number of customers to add ");
scanf("%d", &c);
puts("enter customer names");
for(size_t i = x , j = 0; i < c x; i, j){
scanf("%s", &*namePtr[i][j]);
}
puts("printing customers combined\n");
for(size_t i = 0, j = 0; i < x c; i, j){
printf("%s ", &*namePtr[i][j]);
}
return 0;
}
結果是阿里邁克威爾(NULL)(NULL)
請記住,第一個客戶數量是 3,第二個是 2
uj5u.com熱心網友回復:
本宣告
char *namePtr[SIZE][SIZE];
沒有意義。
您需要宣告指向字串的 SIZE 指標,例如
char *namePtr[SIZE];
由于無效宣告,以下 for 回圈也沒有意義。
此外這個for回圈
for(size_t i = x , j = 0; i < c x; i, j){
scanf("%s", &*namePtr[i][j]);
}
呼叫未定義的行為,因為陣列namePtr中索引從 x 開始的指標未初始化。
看來您需要的是以下內容。
#include <stdio.h>
#define SIZE 50
int main( void )
{
char name[SIZE][SIZE];
char * namePtr[SIZE];
printf("enter no of customers ");
int n = 0;
scanf( "%d", &n );
printf( "enter %d customer names\n", n );
for ( int i = 0; i < n; i )
{
scanf( "Is", name[i] );
namePtr[i] = name[i];
}
puts( "\nPrinting using pointer" );
for ( int i = 0; i < n; i )
{
printf( "%s ", namePtr[i] );
}
putchar( '\n' );
printf( "\n2nd number of customers to add " );
int m = 0;
scanf( "%d", &m );
printf( "enter %d customer names\n", m );
for ( int i = n; i < m n; i )
{
namePtr[i] = name[i];
scanf( "Is", namePtr[i] );
}
puts( "\nprinting customers combined" );
for ( int i = 0; i < n m; i )
{
printf( "%s ", namePtr[i] );
}
putchar( '\n' );
return 0;
}
嘗試運行該程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/370433.html
上一篇:c中結構指標內的雙陣列
