c语⾔数组打印字符串,C语⾔打印循环中的数组字符串
OK,我会建议你做⼀些更有效的,并且是使⽤双指针。通过这样做,您可以解决2D阵列版本中存在的⼀些问题。
第⼀个问题是,如果⽤户想要插⼊超过999个糖果,你会怎么做。你的数组不能容纳它们。
其次,如果⽤户输⼊⼤于100个字符的名称,你会怎么做。再⼀次,你的⼆维数组不能容纳它。⽽且,尽管⽤户可能输⼊⼤于100个字符的名称,但⼤多数⽤户的输⼊会⽐这个少得多,现在对于每个字符串,当您可能只需要⼤约50个时,就会分配100个位置。
因此,让我们来处理这些问题。 我可能会做这样的事情:
#include
#include // for strcpy(), strlen()
#include // for malloc()
int main(void) {
char **sweet_names; // make a double pointer(or you might see that as array of pointers
char reader[300]; // this variable will help us read every name into the sweet_names
int sweet_number;
int i, j;
// Your code here to get the number of sweet_names
/*Prompts the user to enter the number of sweets and saves it to sweet_number*/
printf("Please enter the number of sweets:\n");
scanf("%d", &sweet_number);
// Now that you know the sweet_number, allocate as much memory as you need.
// And that can be more than 999 sweet names
sweet_names = (char **) malloc(sweet_number * sizeof(char *));
/
/ i.e. make a character pointer to sweet_number character pointers.
// Again, some of your code here
for (i = 0; sweet_number > i; i++) {
printf("What is the name of the sweet?\n");
scanf("%s", reader); // read into the reader
sweet_names[i] = (char *) malloc(strlen(reader) + 1); // allocate as much memory as you need for the current string, the one just read into reader
strcpy(sweet_names[i], reader); // copy contents of reader to sweet_names[i]
}
// Again, your code to print the names
for (j = 0; sweet_number > j; j++){
printf("%s\n", sweet_names[j]);
free(sweet_names[j]); // free every string you allocated, it is good practice
}
c语言如何创建字符串数组
// Finally, free the sweet_names pointers. Generally, when you allocate
// dynamically, which is what we do with malloc(), it is a good practice
// to free what you allocate becuase otherwise stays in memory and then
// memory leaks are created. There is a lot to say about C and memory
// but anyway, remember to free
free(sweet_names);
return 0;
}
最后,现在程序再次有限制只读名最多,因为reader 300个字符,但这个东西,你也可以处理,⽽这是为读者分配⼀个疯狂的内存量,如1000000 个字符,然后释放它。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。