从C中的Ints数组创建一个字符串数组

时间:2013-11-02 21:59:08

标签: c arrays pointers c-strings

我正在尝试将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)。我在这里错过了什么?提前致谢

3 个答案:

答案 0 :(得分:1)

这是因为你将str_args的每个条目分配给一个本地指针,一旦循环循环就会超出范围。

您可能需要考虑strdup

str_args[i] = strdup(buffer);

当然,您必须freestrdup分配的内存{/ 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]);
}