我正在尝试将int数组转换为c中的字符串数组。到目前为止我的代码是:
int args[] = {1, 3000};
char *str_args[15];
int i = 0;
for(i; i<=((sizeof(args)/sizeof(args[0]))); i++){
char buffer[10];
sprintf(buffer, "%d", args[i]);
str_args[i] = buffer;
}
printf("%s\n", *str_args[0]);
此代码导致我的程序崩溃,而不是像我期望的那样输出1(第一个arg)。我在这里错过了什么?提前致谢
答案 0 :(得分:1)
这是因为你将str_args
的每个条目分配给一个本地指针,一旦循环循环就会超出范围。
您可能需要考虑strdup
:
str_args[i] = strdup(buffer);
当然,您必须free
由strdup
分配的内存{/ 1}。
当您想要打印字符串时,在循环之后打印时也遇到问题,但*str_args[0]
取消引用第一个字符串。即它是第一个字符而不是字符串。删除解除引用操作符*
,它应该可以正常工作。
答案 1 :(得分:0)
for(i; i<=((sizeof(args)/sizeof(args[0]))); i++){
应该是:
for(i=0; i<((sizeof(args)/sizeof(args[0]))); i++){//take out the `=` after >, add i=0 first.
按照最初编写的方式,i
将达到2,并导致您遇到的超支。
(i=0
是可选的,因为您之前在行中初始化了i
,但是它的形式更好,只需在for循环中执行。)
否则你正在超越你的缓冲区。顺便说一句,你确实意识到以下数组中只有两个项目,对吗?
int args[] = {1, 3000};
答案 2 :(得分:0)
在printf上,参数的数据类型不正确 您还需要将临时“缓冲区”复制到已分配的内存,或者每个循环都会覆盖下一个 下面的代码修复了这两个问题
#include<stdio.h>
#include<string.h>
main() {
int args[] = {1, 3000};
char *str_args[15];
int i = 0;
for(i; i<=((sizeof(args)/sizeof(args[0]))); i++){
char buffer[10];
sprintf(buffer, "%d", args[i]);
str_args[i] = strdup(buffer);
}
printf("%s\n", str_args[0]);
}