在C语言中,可以使用指针数组来存储指向字符串的指针。以下是一个示例代码,展示了如何从用户接收字符串并将其分配到没有任何额外变量的指针数组中:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STRINGS 10
#define MAX_LENGTH 100
int main() {
char *stringArray[MAX_STRINGS]; // 定义一个指针数组,用于存储字符串指针
int numStrings = 0;
printf("请输入字符串(最多 %d 个,每个字符串最长 %d 个字符):\n", MAX_STRINGS, MAX_LENGTH);
while (numStrings < MAX_STRINGS) {
char temp[MAX_LENGTH + 1]; // 临时存储用户输入的字符串
printf("字符串 %d: ", numStrings + 1);
if (fgets(temp, sizeof(temp), stdin) != NULL) {
// 去除换行符
temp[strcspn(temp, "\n")] = '\0';
// 分配内存并将字符串复制到指针数组中
stringArray[numStrings] = strdup(temp);
if (stringArray[numStrings] == NULL) {
perror("内存分配失败");
exit(EXIT_FAILURE);
}
numStrings++;
} else {
break;
}
}
printf("\n您输入的字符串是:\n");
for (int i = 0; i < numStrings; i++) {
printf("%s\n", stringArray[i]);
}
// 释放分配的内存
for (int i = 0; i < numStrings; i++) {
free(stringArray[i]);
}
return 0;
}
malloc
、strdup
等函数动态分配内存。strdup
时可能会失败,需要检查返回值并处理错误。strdup
时可能会失败,需要检查返回值并处理错误。fgets
可以限制输入长度,避免缓冲区溢出。通过上述代码和解释,可以清楚地了解如何从用户接收字符串并将其分配到指针数组中,以及相关的概念和注意事项。
领取专属 10元无门槛券
手把手带您无忧上云