首页 > 解决方案 > 字符串数组 C

问题描述

我函数里面的两个printf有问题,代码停在了 megainput[val1-1] = strdup(input);,怎么回事?(val1 的最小值为 1)我没有写 readCommand 函数,因为没有问题。最后的程序是一个列表,其中每个节点->字符串都指向一个兆输入区域。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1025
char input[N];
char **megainput=NULL;
struct Node 
{
    char *string;
    struct Node* before; 
    struct Node* after; 
}*starter;
                                                            //creo il nodo di testa starter
void delete();
void change(int val1, int val2){
    int intervallo=val2-val1+1;
    struct Node* nodo = (struct Node*)malloc(sizeof(struct Node));
    fgets(input, 1025, stdin);
    megainput[val1-1] = strdup(input);   //error here
    printf("%s ",input);
    nodo->string = megainput[val1-1];
    printf("%s",nodo->string);
    
}
int main(int argc, char *argv[]) {
    starter = (struct Node *)malloc(sizeof(struct Node));
    starter->string=NULL;
    starter->before = NULL; 
    starter->after = NULL;
    char *command;                          //dubbio
    int *val1;
    int *val2;
    while (1)
    {
       readCommand(&command, &val1, &val2);
       change(val1, val2);
     }
    return 0;  
}

标签: arrayscstringstructmalloc

解决方案


strdup()复制字符串input(),但您需要为指针数组分配内存megainput()

#define N 1025
char input[N];
char **megainput=NULL;
size_t megainput_max = -1;
struct Node 
{
    char *string;
    struct Node* before; 
    struct Node* after; 
}*starter;
                                                            //creo il nodo di testa starter
void delete();
void change(int val1, int val2){
    int intervallo=val2-val1+1;
    struct Node* nodo = (struct Node*)malloc(sizeof(struct Node));
    fgets(input, N, stdin);
    if (val1-1 > megainput_max) { // Need to add more to megaainput
        char **temp = realloc(megainput, val1 * sizeof(*megainput));
        if (!temp) {
            printf("Memory allocation failure\n");
            exit(1);
        }
        megainput = temp;
        megainput_max = val1 - 1;
    }
    megainput[val1-1] = strdup(input);   //error here
    printf("%s ",input);
    nodo->string = megainput[val1-1];
    printf("%s",nodo->string);
    
}
int main(int argc, char *argv[]) {
    starter = (struct Node *)malloc(sizeof(struct Node));
    starter->string=NULL;
    starter->before = NULL; 
    starter->after = NULL;
    char *command;                          //dubbio
    int *val1;
    int *val2;
    while (1)
    {
       readCommand(&command, &val1, &val2);
       change(val1, val2);
     }
    return 0;  
}

推荐阅读