arrays - 字符串数组 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;
}
解决方案
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;
}
推荐阅读
- oracle - 如何从多个表和列中从 Oracle 检索数据而不重复?
- ios - 将 CAGradientLayer 应用于 layer.borderColor
- apache-kafka - 流集:有没有办法使用流集来计算 Kafka 主题中的记录
- c - 如何为char数组使用指针?
- javascript - 使用 $project 时添加到数组的值
- python - 绘制直方图错误 - 想要交换 x 和 y 轴
- cassandra - DSE 6.0 和 6.7 是否禁用了 KeyCache?
- mysql - 如何在使用 flask_mysqldb 的烧瓶中创建单元测试?
- javascript - 如何将数组打印到控制台?
- c# - 在 Unity 中将矩形投影到球体上