Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 创建字符串数组并打印它_C_Arrays_C Strings - Fatal编程技术网

C 创建字符串数组并打印它

C 创建字符串数组并打印它,c,arrays,c-strings,C,Arrays,C Strings,设置以下乐器的阵列: 大提琴吉他小提琴低音提琴 循环并去掉元音。 我的尝试: #include <stdio.h> #include <stdlib.h> int main() { char *aszMusicalInstruments[4]; aszMusicalInstruments[0] = malloc(6 * sizeof(char)); aszMusicalInstruments[0] = "CELLO"; aszMusica

设置以下乐器的阵列: 大提琴吉他小提琴低音提琴 循环并去掉元音。 我的尝试:

#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;
}
#包括
#包括
int main()
{
char*aszMusicalInstruments[4];
aszMusicalInstruments[0]=malloc(6*sizeof(char));
aszMusicalInstruments[0]=“大提琴”;
aszMusicalInstruments[1]=malloc(7*sizeof(char));
aszMusicalInstruments[1]=“吉他”;
aszMusicalInstruments[2]=malloc(12*sizeof(char));
aszMusicalInstruments[2]=“低音提琴”;
aszMusicalInstruments[3]=malloc(7*sizeof(char));
aszMusicalInstruments[3]=“小提琴”;
int iii;
对于(iii=0;iii<4;iii++)
{
int jjj=0;
而(aszMusicalInstruments[iii][jjj]!='\0')
{
如果(aszMusicalInstruments[iii][jjj]=“A”| aszMusicalInstruments[iii][jjj]=“E”| aszMusicalInstruments[iii][jjj]=“I”| aszMusicalInstruments[iii][jjj]=“O”| aszMusicalInstruments[iii][jjj]=“U”)
{
aszMusicalInstruments[iii][jjj]=''uu';
}
putchar(aszMusicalInstruments[iii][jjj]);
jjj++;
}
}
返回0;
}
但程序在打印C后立即停止工作。

行:

aszMusicalInstruments[0] = "CELLO"
没有将字符串复制到您保留的内存中。相反,它将指针更改为指向程序中的常量字符串

要将其复制到您刚刚用
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");

最后一种解决方案的优点是您不必担心字符串的长度。

第1点

  • 您不分配字符串,而是复制它们,在
    malloc()
    ing之后,需要
    free()
    稍后
或者

  • 您不需要
    malloc()
    ,而是
    strdup()
    字符串文本,以后需要
    free()
或者

  • 您不必
    malloc()
    ,而是将字符串文本分配给指针。不需要
    free()
第2点:

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

putchar(aszMusicalInstruments[iii][jjj]);

else
if
检查的条件下。

没有必要对此进行动态联合,这只会使问题更加复杂

只需使用一个数组:

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

这是一个二维字符数组,与一维字符指针数组(
char*aszMusicalInstruments[]={“CELLO”,…
)相反,因此您可以自由修改字符。

定义“停止工作”?查看您的代码,我想您有一个写入只读数据错误。您将
malloc(…)
存储在
Instruments[0]中
并在用只读字符串的地址覆盖后立即使用strcpy(aszMusicalInstruments[0],“CELLO”);而不是赋值操作。与您的问题无关,但标识符为
iii
jjj
会使您的程序不可读。但是循环变量不是命名为iii,jjj吗?@MichaelWalzYou可以根据需要命名循环变量,甚至可以命名为
fherukukhkj
。最重要的是,您的程序是可读的。这就是备忘录ry leak…没错,但在这里断章取义,您也可以使用strdup(“CELLO”)而不是malloc+strcpy