创建一个字符串数组并打印它
Creating an array of strings and printing it
设置一组以下乐器:
大提琴 吉他 小提琴 低音提琴
循环并删除元音。
我的尝试:
#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] != '[=10=]')
{
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就停止工作了
行:
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]);
在if
检查的else
条件下。
没必要为此做动态分配,只会让问题变得更复杂。
只需使用一个数组:
char aszMusicalInstruments[][20] = {
"CELLO",
"GUITAR",
"DOUBLE BASS",
"VIOLIN"
};
这是一个二维字符数组,而不是一维字符指针数组 (char *aszMusicalInstruments[] = { "CELLO", ...
),因此您可以自由修改字符。
设置一组以下乐器: 大提琴 吉他 小提琴 低音提琴 循环并删除元音。 我的尝试:
#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] != '[=10=]')
{
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就停止工作了
行:
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]);
在if
检查的else
条件下。
没必要为此做动态分配,只会让问题变得更复杂。
只需使用一个数组:
char aszMusicalInstruments[][20] = {
"CELLO",
"GUITAR",
"DOUBLE BASS",
"VIOLIN"
};
这是一个二维字符数组,而不是一维字符指针数组 (char *aszMusicalInstruments[] = { "CELLO", ...
),因此您可以自由修改字符。