我已经尝试了递归和迭代方法,但我一直遇到存储长度不确定的字符串的问题。如果他们是某种图书馆或Api电话,可以一直读到下一个空白,那将是非常有用的。
但本质上,我需要创建一个包含字符数组的结构数组。
使用malloc和realloc为您的输入腾出空间。选择一个合理的起始大小(你必须知道需要多少个字符)。每次重新分配时,请将大小增加一倍。
我想这个例子展示了您想要的东西。我建议玩malloc
和free
来发现它的行为。还要阅读goto上的评论,除非你真的知道自己在做,否则不要使用goto
。你可以很容易很难地使用它失败。一个带有if的while
循环来检查缓冲区是否溢出下一个字符会更好,但我很懒,所以我保持原样。如果你还有任何问题,请问。
#include <malloc.h>
#include <string.h>
int main( ) {
unsigned bufferSize = 0; // our array size
int i = 0; // current position in buffer
// we allocate memory for our buffer
char *buffer = (char *)malloc( bufferSize += 10 );
int ch = EOF; // set to eof, we will use this to buffer input
// read input until buffer is full
repeat_input:
for( ; i < bufferSize; i++ ) { // a while loop would be better for this job...
ch = fgetc( stdin );
if( ch == ' ' ) {
// if there is a space we can break here
goto done; // this is bad coding practice, i am just a bit lazy now
}
buffer[ i ] = ch;
}
// keep our old buffer pointer to not create a memleak
char *old_buffer = buffer;
buffer = (char *)malloc( bufferSize += 10 );
// copy content of old buffer to new one
int k = 0;
for( k = 0; k <= i; k++ ) {
buffer[ k ] = old_buffer[ k ];
}
// free RAM, else we have a memleak
free( old_buffer );
goto repeat_input;
done:
fputs( buffer, stderr );
free( buffer );
return 1;
}