免责声明:这并不意味着具有功能性,只是一个指针练习。
我的程序采用随机整数并将它们转换为字符串。然后,该字符串被放入字符指针数组中。 这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void empty_arr(char *);
void fn(char **);
int main()
{
char *arr[10];
fn(arr);
printf("here!\n");
printf("%c\n", *arr[0]);
return 0;
}
void empty_arr(char *a)
{
while (*a != '\0')
{
*a = '\0';
a++;
}
}
void fn(char **a)
{
char **p = a;
srand(time(NULL));
char temp[10];
char *t = temp;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 3; j++)
{
int random = 32 + (rand() % 30);
*t = (char)random;
t++;
}
*p = temp;
empty_arr(temp);
t = temp;
}
}
程序的结果是: 在这里!
此后不再打印任何内容。
我相信问题出在这个块:
*p = temp;
empty_arr(temp);
t = temp;
是否有更好的方法将“随机字符串”存储在字符指针数组中?
尝试将此代码进行一些更改:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void fn(char **);
int main()
{
char *arr[10];
fn(arr);
printf("here!\n");
for (int i = 0; i < 10; i++) {
printf("%s\n", arr[i]);
free(arr[i]); // Free dynamically allocated memory
}
return 0;
}
void fn(char **a)
{
srand(time(NULL));
for (int i = 0; i < 10; i++) {
char *temp = (char *)malloc(4); // Allocate memory for a string of length 3 + 1 for null terminator
for (int j = 0; j < 3; j++) {
int random = 32 + (rand() % 30);
temp[j] = (char)random;
}
temp[3] = '\0'; // Null-terminate the string
a[i] = temp;
}
}
它使用 malloc 为每个字符串分配内存,将生成的字符串复制到分配的内存中,并确保以空终止字符串。稍后在主函数中,我们释放动态分配的内存以防止内存泄漏。