我正在使用动态内存分配和字符串。任务是提示用户输入他们将输入的字符字符串的数量(每个最多 80 个字符),然后让一个函数获取字符串,另一个函数打印字符串和字符数。
我使用指针数组从函数中获取数据。一切都很好,我准备提交作业,直到我重新阅读问题并看到指针数组也必须动态分配。我得到了那个工作,但现在当i = 0
,puts(strptr1[i]);
只是给我胡言乱语(ɶ?)。同时,i = 1
和起来都很好。
谢谢,这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inputStrings(char *strptr1[], int n);
void outputStrings(char *strptr1[], int n);
int main()
{
int n = 0;
char *strptr = 0;
printf("This program uses dynamic storage to manipulate character strings. Fun!");
printf("\n\nHow many strings will you enter? ");
scanf("%d", &n);
fseek(stdin,0,SEEK_END); // Clear input buffer
// char *strptr[n];
strptr = (char *) calloc(n, sizeof(char));
inputStrings(strptr, n);
outputStrings(strptr, n);
return 0;
}
void inputStrings(char *strptr1[], int n) // Prompt for input and copy into dynamic memory
{
const int STRLNG = 80;
int i = 0;
char strname[STRLNG];
printf("Input strings:\n");
for (i = 0; i < n; i++)
{
gets(strname);
strptr1[i] = (char *) malloc(strlen(strname+1));
strcpy(strptr1[i], strname);
}
}
void outputStrings(char *strptr1[], int n) // Determine length and print length and string
{
int i = 0;
printf("\nChar | String\n");
for (i = 0; i < n; i++)
{
printf(" %2d | ", strlen(strptr1[i]));
puts(strptr1[i]);
}
}