【问题标题】:How do I print all array elements on the same line?如何在同一行打印所有数组元素?
【发布时间】:2014-02-15 07:24:12
【问题描述】:

我不得不删除所有代码。我正在寻找的是如何在同一行中 sprintf 数组的所有元素。

显示器有2行,我需要打印数组10,24,32,40,51,.....第一行 和 10,51 .....第二行

【问题讨论】:

  • 关于 sprintf 的解释:这是一种打印方式,您正在打印数组!
  • 如果你有数组指针,那么你也可以通过索引访问它。
  • 保罗,是的 "%d %d ... %d %d"
  • @jjboy 使用 sprintf 有什么问题吗?正如我之前所说,如果您使用数组指针,那么您也可以通过数组索引访问它,就像您在之前的 sprintf 语句中使用的那样。
  • JKB,我正在使用循环:char *out;出= str; for (i = 0; i

标签: c arrays assembly


【解决方案1】:

样本

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *join(int n, const int array[n], const char *format, const char *sep){
    if(!format)
        format = "%d";
    if(!sep)
        sep = ", ";
    size_t len = strlen(sep)*(n-1)+1;//+1 for EOS
    int i;
    for(i=0;i<n;++i)
        len += snprintf(NULL, 0, format, array[i]);
    char *result = malloc(len);
    if(!result)return NULL;
    size_t pos = 0;
    for(i=0;i<n;++i){
        pos += sprintf(result + pos, format, array[i]);
        if(i != n-1)
            pos += sprintf(result + pos, "%s", sep);
    }
    return result;
}

int main (void){
    int array[][5]={{10,24,32,40,51},{10,1,99,77,88}};
    int row_size = sizeof(array)/sizeof(array[0]);
    int col_size = sizeof(array[0])/sizeof(int);
    char *join_str;
    int i;
    for(i=0;i<row_size;++i){
        char *join_str = join(col_size, array[i], "%2d", ", ");
        printf("%s\n", join_str);
        free(join_str);
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    你的数组有 10 个元素

    #define N 10
    int V[N] = {10,34, 34, 11};
    

    但是,它是部分显式初始化的,因此索引 0、1、2 和 3 分别包含 10、34、34 和 11。 C 中部分显式初始化的数组会将剩余元素(包括 4 .. 9)隐式初始化为 0。

    那么你:

    sprintf (str, "%d %d ... %d %d", V[0], V[1], V[N-2], V[N-1];
    

    这不是您实际运行的代码,因为它缺少),并且str 未定义。然而,这会做的是向str(不是屏幕)写入四个值,即值 0、1、8 和 9(即前 2 和最后 2 个值),即字符 0 1 0 0 加上终止 @ 987654327@.

    当您使用sprintf() 而不是snprintf() 时,您无法检查这是否会溢出str

    由于问题的格式,很难说出你当时在做什么,但看起来你正在调用一个函数array,它可能会或可能不会修改数组并再次打印出来。但是,您的汇编函数定义为:

    __asm void array (int V[], int N, int V) ....
    

    它有一个名为V 的数组/指针参数,第二个参数名为N(尽管主程序#defines 将其设置为10(这样就行不通了),第三个参数也称为@ 987654336@ 不起作用,因为这是第一个参数的名称。

    你还有一个神秘的X 定义为 10,然后就不用了。

    不是特别清楚你在问什么,如果你发布一个小的工作代码sn-p会更好,但我希望以上内容有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-05-06
      • 2021-04-07
      • 2022-06-13
      • 1970-01-01
      • 2021-11-29
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多