使用可重用变量将值输入到字符指针数组中

问题描述 投票:0回答:1

免责声明:这并不意味着具有功能性,只是一个指针练习。

我的程序采用随机整数并将它们转换为字符串。然后,该字符串被放入字符指针数组中。 这是代码:

#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;

是否有更好的方法将“随机字符串”存储在字符指针数组中?

arrays c pointers
1个回答
0
投票

尝试将此代码进行一些更改:

#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 为每个字符串分配内存,将生成的字符串复制到分配的内存中,并确保以空终止字符串。稍后在主函数中,我们释放动态分配的内存以防止内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.