【发布时间】:2014-07-25 17:19:21
【问题描述】:
我有一个已定义的数组样本:
char *arguments[] = {"test-1","test-2","test-3"};
我正在尝试添加命令行给出的参数输入。我尝试了 strcpy 函数,并将它传递给数组元素,例如arguments[num+1] = argv[1] 但还是没有成功。
我知道这是一个非常简单的问题,但我不是经验丰富的程序员,我的所有经验都来自高级编程语言(PHP、Perl)。
我在网上找到的最接近的工作样本是C program to insert an element in an array 和C program to delete an element from an array。但并不是我要找的东西,他们正在使用 intigers 而不是我需要的角色。
我的目标是找到一种在动态数组中添加和删除字符串的方法,该数组可以根据脚本的进程进行增长和缩小。
感谢大家花时间和精力帮助我。
工作代码示例如下:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
/* Set as minimum parameters 2 */
#define MIN_REQUIRED 2
#define MAX_CHARACTERS 46
/* Usage Instructions */
int help() {
printf("Usage: test.c [-s <arg0>]\n");
printf("\t-s: a string program name <arg0>\n");
printf("\t-s: a string sample name <arg1>\n");
return (1);
}
int main(int argc, char *argv[]) {
if ( argc < MIN_REQUIRED ) {
printf ("Please follow the instructions: not less than %i argument inputs\n",MIN_REQUIRED);
return help();
}
else if ( argc > MIN_REQUIRED ) {
printf ("Please follow the instructions: not more than %i argument inputs\n",MIN_REQUIRED);
return help();
}
else {
int size, realsize;
char *input = NULL;
char *arguments[] = {"test-1","test-2","test-3"};
int num = sizeof(arguments) / sizeof(arguments[0]);
printf("This is the number of elements before: %i\n",num);
int i;
for (i=0; i<num; i++) {
printf("This is the arguments before: [%i]: %s\n",i,arguments[i]);
}
printf("This is the input argument: %s\n",argv[1]);
printf("This is the array element: %i\n",num+1);
input = (char *)malloc(MAX_CHARACTERS);
if (input == NULL) {
printf("malloc_in failled\n");
exit(0);
}
memset ( input , '\0' , MAX_CHARACTERS);
int length_before = strlen(input);
printf("This is the length before: %i\n",length_before);
strcpy(input , argv[1]);
int length_after = strlen(input);
printf("This is the length after: %i\n",length_after);
//arguments[num+1] = input;
strcpy(arguments[num+1],input);
int num_2 = sizeof(arguments) / sizeof(arguments[0]);
printf("This is the number of elements after: %i\n",num);
for (i=0; i<num_2; i++) {
printf("This is the arguments after [%i]: %s\n",i,arguments[i]);
}
} // End of else condition
return 0;
} // Enf of int main ()
【问题讨论】:
-
你不能那样使用数组。要么声明足够大的数组(例如
char *arguments[MAX_ARGUMENTS],其中常量是一些合理的数字),要么在您知道有多少参数时动态分配它。