C:在运行时输入文本,之前没有设置固定的数组大小
C: Input text during runtime without setting a fixed array size before
我是 C 编程的新手,因此遇到了一些问题。
我的问题是我不知道如何在运行时输入特定文本并将其保存到没有固定大小的字符数组中。
编译器是否可以识别文本大小,然后在运行时分配内存?
我已经实现了 ROT 13 加密功能,我希望用户插入文本。
提前感谢您的帮助。
在c中,如果你想动态分配内存你应该使用"new"运算符。例如:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: a.out num\n");
return 0;
}
int size = atoi(argv[1]);
printf("the size is %d\n", size);
int *t = new int[size];
delete[] t;
return 0;
}
运行这个program.It会对你有帮助
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] ) {
int n,i,*ptr,s=0;
char *pt;
if( argc == 2 ) {
for(i=0;i<argv[1][i]!='[=10=]';i++){
s++;
}
printf(" %s\n", argv[1]);
printf("array size is= %d\n", s);
pt=(char*)malloc(s*sizeof(char));
for(i=0;i<s;i++)
pt[i]=argv[1][i];
for(i=0;i<pt[i]!='[=10=]';i++)
printf("%c",pt[i]);
}
else if( argc > 2 ) {
printf("Too many arguments supplied.\n");
}
else {
printf("One argument expected.\n");
}
}
这是使用 realloc
根据需要获取内存的一种方法。我会使用 CHUNKSIZE
而不是 4
,但我限制了它以便于测试。
#include <stdio.h>
#include <stdlib.h>
#define CHUNKSIZE 4
int main(void){
char *text;
int maxlen = CHUNKSIZE;
int index = 0;
int ch;
text = malloc(CHUNKSIZE);
if(text == NULL)
exit(1);
printf("Enter your text:\n");
while((ch = getchar()) != EOF && ch != '\n') {
text[index++] = ch;
if (index >= maxlen) {
maxlen += CHUNKSIZE;
text = realloc(text, maxlen);
if(text == NULL)
exit(1);
}
}
text[index] = 0; // terminate
printf("You entered: %s\n", text);
free(text);
return 0;
}
节目环节:
Enter your text:
A quick brown fox jumps over the lazy dog.
You entered: A quick brown fox jumps over the lazy dog.
我是 C 编程的新手,因此遇到了一些问题。
我的问题是我不知道如何在运行时输入特定文本并将其保存到没有固定大小的字符数组中。 编译器是否可以识别文本大小,然后在运行时分配内存?
我已经实现了 ROT 13 加密功能,我希望用户插入文本。
提前感谢您的帮助。
在c中,如果你想动态分配内存你应该使用"new"运算符。例如:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: a.out num\n");
return 0;
}
int size = atoi(argv[1]);
printf("the size is %d\n", size);
int *t = new int[size];
delete[] t;
return 0;
}
运行这个program.It会对你有帮助
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] ) {
int n,i,*ptr,s=0;
char *pt;
if( argc == 2 ) {
for(i=0;i<argv[1][i]!='[=10=]';i++){
s++;
}
printf(" %s\n", argv[1]);
printf("array size is= %d\n", s);
pt=(char*)malloc(s*sizeof(char));
for(i=0;i<s;i++)
pt[i]=argv[1][i];
for(i=0;i<pt[i]!='[=10=]';i++)
printf("%c",pt[i]);
}
else if( argc > 2 ) {
printf("Too many arguments supplied.\n");
}
else {
printf("One argument expected.\n");
}
}
这是使用 realloc
根据需要获取内存的一种方法。我会使用 CHUNKSIZE
而不是 4
,但我限制了它以便于测试。
#include <stdio.h>
#include <stdlib.h>
#define CHUNKSIZE 4
int main(void){
char *text;
int maxlen = CHUNKSIZE;
int index = 0;
int ch;
text = malloc(CHUNKSIZE);
if(text == NULL)
exit(1);
printf("Enter your text:\n");
while((ch = getchar()) != EOF && ch != '\n') {
text[index++] = ch;
if (index >= maxlen) {
maxlen += CHUNKSIZE;
text = realloc(text, maxlen);
if(text == NULL)
exit(1);
}
}
text[index] = 0; // terminate
printf("You entered: %s\n", text);
free(text);
return 0;
}
节目环节:
Enter your text:
A quick brown fox jumps over the lazy dog.
You entered: A quick brown fox jumps over the lazy dog.