字符串的动态内存分配和该字符串在 char 数组中的位置
Dynamic memory allocation of string and placement of this string in a char array
我想要一个字符串数组,并且用户一次输入一个字符串。如果数组已满或用户跳过输入(因此字符串将等于“\n”),程序应该结束。
问题是我必须为这些字符串中的每一个动态分配内存,但我找不到有效的方法。
请原谅我的英语问题,但该数组应该是指向 char 的指针数组(例如 char *pin[MAX])
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5
int main()
{
char *pin[MAX];
char s[] = "";
int n = 0;
while(s != "\n"){
printf("Enter a string: ");
gets(s);
pin[n] = malloc(sizeof(char)*strlen(s));
strcpy(pin[n], s);
n++;
if(n = MAX - 1) break;
}
for(int i = 0; i < MAX; i++){
printf("%s ", *pin[i]);
}
return 0;
}
- 使用
fgets
获取输入并将其存储在临时缓冲区中(128 或 256 字节大等)。
- 对存储在此缓冲区中的读取字符串调用
strlen
以查看要分配多少。
- 使用
malloc
为指针 pin[n]
和 strcpy
那里的字符串分配内存。
注意:
char *s;
... while(s !=
是废话,因为 s
尚未初始化。
s != "\n"
是无稽之谈,因为这不是你在 C 中比较字符串的方式。
pin[n] == &s;
是无稽之谈,因为它只是随机输入的东西,程序员不知道为什么。通过反复试验编程是行不通的。
- 一般先学数组和指针再学字符串
我想要一个字符串数组,并且用户一次输入一个字符串。如果数组已满或用户跳过输入(因此字符串将等于“\n”),程序应该结束。 问题是我必须为这些字符串中的每一个动态分配内存,但我找不到有效的方法。
请原谅我的英语问题,但该数组应该是指向 char 的指针数组(例如 char *pin[MAX]) 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5
int main()
{
char *pin[MAX];
char s[] = "";
int n = 0;
while(s != "\n"){
printf("Enter a string: ");
gets(s);
pin[n] = malloc(sizeof(char)*strlen(s));
strcpy(pin[n], s);
n++;
if(n = MAX - 1) break;
}
for(int i = 0; i < MAX; i++){
printf("%s ", *pin[i]);
}
return 0;
}
- 使用
fgets
获取输入并将其存储在临时缓冲区中(128 或 256 字节大等)。 - 对存储在此缓冲区中的读取字符串调用
strlen
以查看要分配多少。 - 使用
malloc
为指针pin[n]
和strcpy
那里的字符串分配内存。
注意:
char *s;
...while(s !=
是废话,因为s
尚未初始化。s != "\n"
是无稽之谈,因为这不是你在 C 中比较字符串的方式。pin[n] == &s;
是无稽之谈,因为它只是随机输入的东西,程序员不知道为什么。通过反复试验编程是行不通的。- 一般先学数组和指针再学字符串