0

我正在尝试将整数数组转换为 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)。我在这里想念什么?提前致谢

4

3 回答 3

1

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

您可能要考虑strdup

str_args[i] = strdup(buffer);

当然,这时你必须要free分配的内存strdup


当您想打印一个字符串但*str_args[0]取消引用第一个字符串时,在循环之后打印时也会遇到问题。即它是第一个字符而不是字符串。删除取消引用运算符*,它应该可以正常工作。

于 2013-11-02T22:03:07.713 回答
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};
于 2013-11-02T22:03:12.460 回答
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]);
}
于 2013-11-02T22:06:55.457 回答