如何将 atoi 与 int 和 malloc 一起使用?
How to use atoi with an int and malloc?
当我尝试将 atoi 与 int 和 malloc 一起使用时,我遇到了一堆错误,并且密钥被赋予了错误的值,我做错了什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct arguments {
int key;
};
void argument_handler(int argc, char **argv, struct arguments *settings);
int main(int argc, char **argv) {
argv[1] = 101; //makes testing faster
struct arguments *settings = (struct arguments*)malloc(sizeof(struct arguments));
argument_handler(argc, argv, settings);
free(settings);
return 0;
}
void argument_handler(int argc, char **argv, struct arguments *settings) {
int *key = malloc(sizeof(argv[1]));
*key = argv[1];
settings->key = atoi(key);
printf("%d\n", settings->key);
free(key);
}
你可能想要这个:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct arguments {
int key;
};
void argument_handler(int argc, char** argv, struct arguments* settings);
int main(int argc, char** argv) {
argv[1] = "101"; // 101 is a string, therefore you need ""
struct arguments* settings = (struct arguments*)malloc(sizeof(struct arguments));
argument_handler(argc, argv, settings);
free(settings);
return 0;
}
void argument_handler(int argc, char** argv, struct arguments* settings) {
char* key = malloc(strlen(argv[1]) + 1); // you want the length of the string here,
// and you want char* here, not int*
strcpy(key, argv[1]); // string needs to be copied
settings->key = atoi(key);
printf("%d\n", settings->key);
free(key);
}
但这很尴尬,其实argument_handler
可以改写成这样:
void argument_handler(int argc, char** argv, struct arguments* settings) {
settings->key = atoi(argv[1]);
printf("%d\n", settings->key);
}
免责声明:我只是纠正了明显错误的地方,还有一些检查需要做,例如如果 argc
小于 2 等等
当我尝试将 atoi 与 int 和 malloc 一起使用时,我遇到了一堆错误,并且密钥被赋予了错误的值,我做错了什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct arguments {
int key;
};
void argument_handler(int argc, char **argv, struct arguments *settings);
int main(int argc, char **argv) {
argv[1] = 101; //makes testing faster
struct arguments *settings = (struct arguments*)malloc(sizeof(struct arguments));
argument_handler(argc, argv, settings);
free(settings);
return 0;
}
void argument_handler(int argc, char **argv, struct arguments *settings) {
int *key = malloc(sizeof(argv[1]));
*key = argv[1];
settings->key = atoi(key);
printf("%d\n", settings->key);
free(key);
}
你可能想要这个:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct arguments {
int key;
};
void argument_handler(int argc, char** argv, struct arguments* settings);
int main(int argc, char** argv) {
argv[1] = "101"; // 101 is a string, therefore you need ""
struct arguments* settings = (struct arguments*)malloc(sizeof(struct arguments));
argument_handler(argc, argv, settings);
free(settings);
return 0;
}
void argument_handler(int argc, char** argv, struct arguments* settings) {
char* key = malloc(strlen(argv[1]) + 1); // you want the length of the string here,
// and you want char* here, not int*
strcpy(key, argv[1]); // string needs to be copied
settings->key = atoi(key);
printf("%d\n", settings->key);
free(key);
}
但这很尴尬,其实argument_handler
可以改写成这样:
void argument_handler(int argc, char** argv, struct arguments* settings) {
settings->key = atoi(argv[1]);
printf("%d\n", settings->key);
}
免责声明:我只是纠正了明显错误的地方,还有一些检查需要做,例如如果 argc
小于 2 等等