C char*, char**, char***, 打印解难
C char*, char**, char***, printing and freeing trouble
我正在学习如何在 C 中使用指针(使用 malloc 和 free),但我在这个练习中遇到了一些麻烦。我只想制作一个指针数组,我想在其中保存每个单词的方向。然后我想为一个特定的词做一个 free(),但是这个 free 使我的程序崩溃。
int main
{
printf("Introduce how many words do you want. \n");
scanf("%d", &numWords);
getchar();
char ***array = (char***)malloc(sizeof(char**) * numWords);
if (array == nullptr)
{
exit(1);
}
for (int i = 0; i < numWords; i++) array[i] = (char**)malloc(sizeof(char*)) ;
for (int i = 0; i < numWords; i++)
{
printf("Enter your word number %d: \n", i + 1);
scanf("%s", &(array[i]));
getchar();
}
for (int i = 0; i < numWords; i++)
{
printf("%s \n", &(array[i]));
}
free(array[1]);
printWord(array[2])
}
另外,我想制作这个功能,因为我想打印每个带有 space 的单词的字符。它也使我的程序崩溃。
void printWord(char **array)
{
for (int i = 0; i < strlen(*array); i++) printf("%c ", &((*array)[i]));
}
不知道如何聚焦这个。你有什么推荐给我的?你在我的代码中发现任何问题吗?谢谢。
你把星星搞混了。它是这样工作的:
- 字符*: 字符串
- char**: 列表<字符串>
- char***: list< list< string > >
再次检查您的代码并检查是否每个 printf("%s" ...) 都对应一个 char* 并且每个 printf("%c" ...) 都对应一个 char。同时打开你的编译器中的所有警告,如果它有任何好处,它应该在你将错误的类型传递给 printf() 时警告你。
提示:main 中的 array 变量应该是 char**,而不是 char***。
你需要 char**
并且有很多问题和错误需要修复:
int main{}
应该至少 int main(void){}
你需要 (void)
- 不检查
scanf
错误
nullptr
是c++
关键字,应该是NULL
- 最重要的是
free
您 malloc
编辑的内容。
casting
malloc 并不总是一个好主意,please read this
你的代码应该是这样的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
long unsigned int numWords,i;
char **array;
printf("Introduce how many words do you want:> ");
if((scanf("%lu", &numWords)) != 1){
printf("Error, Fix it!\n");
exit(1);
}
array = malloc(sizeof(char*) * numWords * numWords);
if (array == NULL) {
exit(2);
}
for (i = 0; i < numWords; i++){
array[i] = malloc(sizeof(char*) * 100);
}
for (i = 0; i < numWords; i++){
printf("Enter your word number %lu:> ", i + 1);
if((scanf("%s", array[i])) != 1){
printf("Error, Fix it!\n");
exit(3);
}
}
for (i = 0; i < numWords; i++){
printf("%s \n", array[i]);
}
for (i = 0; i < numWords; i++){
free(array[i]);
}
free(array);
return 0;
}
输出:
Introduce how many words do you want:> 3
Enter your word number 1:> Michi
Enter your word number 2:> aloha
Enter your word number 3:> cool
Michi
aloha
cool
我正在学习如何在 C 中使用指针(使用 malloc 和 free),但我在这个练习中遇到了一些麻烦。我只想制作一个指针数组,我想在其中保存每个单词的方向。然后我想为一个特定的词做一个 free(),但是这个 free 使我的程序崩溃。
int main
{
printf("Introduce how many words do you want. \n");
scanf("%d", &numWords);
getchar();
char ***array = (char***)malloc(sizeof(char**) * numWords);
if (array == nullptr)
{
exit(1);
}
for (int i = 0; i < numWords; i++) array[i] = (char**)malloc(sizeof(char*)) ;
for (int i = 0; i < numWords; i++)
{
printf("Enter your word number %d: \n", i + 1);
scanf("%s", &(array[i]));
getchar();
}
for (int i = 0; i < numWords; i++)
{
printf("%s \n", &(array[i]));
}
free(array[1]);
printWord(array[2])
}
另外,我想制作这个功能,因为我想打印每个带有 space 的单词的字符。它也使我的程序崩溃。
void printWord(char **array)
{
for (int i = 0; i < strlen(*array); i++) printf("%c ", &((*array)[i]));
}
不知道如何聚焦这个。你有什么推荐给我的?你在我的代码中发现任何问题吗?谢谢。
你把星星搞混了。它是这样工作的:
- 字符*: 字符串
- char**: 列表<字符串>
- char***: list< list< string > >
再次检查您的代码并检查是否每个 printf("%s" ...) 都对应一个 char* 并且每个 printf("%c" ...) 都对应一个 char。同时打开你的编译器中的所有警告,如果它有任何好处,它应该在你将错误的类型传递给 printf() 时警告你。
提示:main 中的 array 变量应该是 char**,而不是 char***。
你需要 char**
并且有很多问题和错误需要修复:
int main{}
应该至少int main(void){}
你需要(void)
- 不检查
scanf
错误 nullptr
是c++
关键字,应该是NULL
- 最重要的是
free
您malloc
编辑的内容。 casting
malloc 并不总是一个好主意,please read this
你的代码应该是这样的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
long unsigned int numWords,i;
char **array;
printf("Introduce how many words do you want:> ");
if((scanf("%lu", &numWords)) != 1){
printf("Error, Fix it!\n");
exit(1);
}
array = malloc(sizeof(char*) * numWords * numWords);
if (array == NULL) {
exit(2);
}
for (i = 0; i < numWords; i++){
array[i] = malloc(sizeof(char*) * 100);
}
for (i = 0; i < numWords; i++){
printf("Enter your word number %lu:> ", i + 1);
if((scanf("%s", array[i])) != 1){
printf("Error, Fix it!\n");
exit(3);
}
}
for (i = 0; i < numWords; i++){
printf("%s \n", array[i]);
}
for (i = 0; i < numWords; i++){
free(array[i]);
}
free(array);
return 0;
}
输出:
Introduce how many words do you want:> 3
Enter your word number 1:> Michi
Enter your word number 2:> aloha
Enter your word number 3:> cool
Michi
aloha
cool