簡體   English   中英

創建一個字符串數組並打印它

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

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