创建字符串数组并打印它

时间:2015-04-23 09:53:54

标签: c arrays c-strings

设置以下乐器的数组: 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;
}

但程序在打印C后立即停止工作。

4 个答案:

答案 0 :(得分:2)

没有必要为此做动态表示,只是让问题变得更复杂。

只需使用数组:

char aszMusicalInstruments[][20] = {
  "CELLO",
  "GUITAR",
  "DOUBLE BASS",
  "VIOLIN"
};

这是一个2D字符数组,而不是一维字符指针数组(char *aszMusicalInstruments[] = { "CELLO", ...),因此您可以自由修改字符。

答案 1 :(得分:1)

第1点

  • 分配字符串,复制字符串,malloc()后,需要free()以后。

或,

  • 你不是malloc(),而是strdup()字符串文字,稍后需要free()

或,

  • 您没有malloc()并将字符串文字指定给指针。不需要free()

第2点:

根据您所陈述的逻辑,if需要一个计数器else部分。你需要把

putchar(aszMusicalInstruments[iii][jjj]);
else支票的if条件下

答案 2 :(得分:0)

该行:

aszMusicalInstruments[0] = "CELLO"

不是将字符串复制到您保留的内存中。相反,它正在将指针更改为指向程序中的常量字符串。

要将其复制到您刚刚使用malloc保留的内存中,您应使用srtcpy功能。

答案 3 :(得分:0)

而不是

aszMusicalInstruments[0] = malloc(6 * sizeof(char));
aszMusicalInstruments[0] = "CELLO";

你需要:

aszMusicalInstruments[0] = malloc(6 * sizeof(char));
strcpy(aszMusicalInstruments[0], "CELLO");

甚至更简单:

aszMusicalInstruments[0] = strdup("CELLO");

最后一个解决方案的优点是你不得不担心字符串的长度。