[英]Creating an array of strings and printing it
設置以下樂器陣列:CELLO GUITAR VIOLIN DOUBLE BASS循環並取出元音。 我的嘗試:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *aszMusicalInstruments[4];
aszMusicalInstruments[0] = malloc(6 * sizeof(char));
aszMusicalInstruments[0] = "CELLO";
aszMusicalInstruments[1] = malloc(7 * sizeof(char));
aszMusicalInstruments[1] = "GUITAR";
aszMusicalInstruments[2] = malloc(12 * sizeof(char));
aszMusicalInstruments[2] = "DOUBLE BASS";
aszMusicalInstruments[3] = malloc(7 * sizeof(char));
aszMusicalInstruments[3] = "VIOlIN";
int iii;
for (iii = 0; iii < 4; iii++)
{
int jjj = 0;
while (aszMusicalInstruments[iii][jjj] != '\0')
{
if (aszMusicalInstruments[iii][jjj] == 'A' || aszMusicalInstruments[iii][jjj] == 'E' || aszMusicalInstruments[iii][jjj] == 'I' || aszMusicalInstruments[iii][jjj] == 'O' || aszMusicalInstruments[iii][jjj] == 'U')
{
aszMusicalInstruments[iii][jjj] = '_';
}
putchar(aszMusicalInstruments[iii][jjj]);
jjj++;
}
}
return 0;
}
但程序在打印后立即停止工作。
沒有必要為此做動態表示,只是讓問題變得更復雜。
只需使用數組:
char aszMusicalInstruments[][20] = {
"CELLO",
"GUITAR",
"DOUBLE BASS",
"VIOLIN"
};
這是一個2D字符數組,而不是一維字符指針數組( char *aszMusicalInstruments[] = { "CELLO", ...
),因此您可以自由修改字符。
第1點
malloc()
之后,需要以后free()
。 要么,
malloc()
,而是strdup()
字符串文字,以后需要free()
。 要么,
malloc()
並將字符串文字分配給指針。 不需要free()
。 第2點:
根據您所陳述的邏輯, if
需要一個反對else
部分。 你需要把
putchar(aszMusicalInstruments[iii][jjj]);
在if
檢查的else
條件下。
這條線:
aszMusicalInstruments[0] = "CELLO"
不是將字符串復制到您保留的內存中。 相反,它正在將指針更改為指向程序中的常量字符串。
要將它復制到剛剛使用malloc
保留的malloc
您應該使用srtcpy
函數。
代替
aszMusicalInstruments[0] = malloc(6 * sizeof(char));
aszMusicalInstruments[0] = "CELLO";
你需要:
aszMusicalInstruments[0] = malloc(6 * sizeof(char));
strcpy(aszMusicalInstruments[0], "CELLO");
甚至更簡單:
aszMusicalInstruments[0] = strdup("CELLO");
最后一個解決方案的優點是你不得不擔心字符串的長度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.