gpt4 book ai didi

c - 如何在c中将字符串存储在数组中

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:20 25 4
gpt4 key购买 nike

如何在 c 中将字符串列表存储在数组中。原因通常是一个字符串,例如:'string' 在数组(?)中存储为 s|t|r|i|g。现在如果我有一个有 10 个索引的数组并且想在每个索引中存储字符串,我该怎么做?如果不可行,我可以使用什么其他数据结构。

例如:array = 'string1'|'string2'|..

我做了一些事情,但它不起作用:

// Array for name of alphabets, and name of states
35 char *nameOfStates[numStates];
36 char buffer[3];
37
38 // Read the nameOfStates
39 int i;
40 for(i=0;i<numStates;i++){
41 printf("Name of STATES:");
42
43 int z=0;
44 char *buffer2;
45 while(z<2 && fgets(buffer,2,stdin) != NULL){
46
47 buffer2 = strndup(buffer,2);
48 z++;
49 }// End while-loop
50 nameOfStates[i] = buffer2;
51
52 }// End of for-loop to read nameOfStates

编辑:我意识到 array[size] 实际上不起作用!我这样做是因为我的 java 背景,我认为它可能有效。所以我改变了程序,但它仍然抛出段错误。我在下面发布了完整的(编辑过的)程序:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

// Function declaration
void analyze(char *string);
void clearNewLines(void);


int main(int argc, char *argv[]){

// Number of states and number of alphabets of DFA
int numStates;
int numAlphabets;


// Read numStates
printf("Enter the number of STATES:");
scanf("%d",&numStates);

// Flush STDIN
clearNewLines();

// Array for name of alphabets, and name of states
char **nameOfStates = malloc(numStates*sizeof(char*));
char *buffer = NULL;
// Read the nameOfStates
int i;
for(i=0;i<numStates;i++){
printf("Name of STATES:");

fgets(nameOfStates[i],2*sizeof(char),stdin);

}// End of for-loop to read nameOfStates

clearNewLines();
// Read numAlphabets
printf("Enter the number of ALPHABETS: ");
scanf("%d", &numAlphabets);

// Flush STDIN
clearNewLines();

// Array for name of alphabets, and name of states
char nameOfAlphabets[numAlphabets];
// Saving transition table
char *transitionTable[numStates][numAlphabets];


// Read name of alphabets
int j;
for(j=0;j<numAlphabets;j++){

printf("Name of ALPHABETS:");
nameOfAlphabets[j] = getchar();

// Flush STDIN
clearNewLines();

}// End for-loop to read alphabets

// Get the transitionTable[states][alphabets]
int row;
for(row=0;row<numStates;row++){

int col;
for(col=0;col<numAlphabets;col++){

printf("Enter Transition From %s to %c: ",nameOfStates[row],nameOfAlphabets[col]);
printf("\n");
}

}

return 0;
}// End of main function

/*
*
* clearNewLines - clear any newline character present at the STDIN
*/
void clearNewLines(void)
{
int c;
do
{
c = getchar();
} while (c != '\n' && c != EOF);
}

最佳答案

首先:您不能使用变量定义数组大小。我的意思是:char buf[variable]; 不起作用。

你必须这样做:

char **buf;

buf = malloc(sizeof(char) * number_of_strings);
if (buf == NULL)
return (MALLOC_ERROR);

或者像这样的宏:

// in your header file
#define BUF_SIZE 12
// in your .c file
char *buf[BUF_SIZE];

然后您还必须 malloc 数组的第二个维度。例如:

int i;

i = 0
while (buf[i])
{
buf[i] = malloc(sizeof(char) * string_length);
if (buf[i] == NULL)
return (MALLOC_ERROR);
i++;
}

并且不要忘记释放数组的所有维度。

关于c - 如何在c中将字符串存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26407456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com