2014-02-15 4 views
-4

Мне пришлось удалить весь код. То, что я '' выглядит, как sprintf всех элементов массива в одной строке.Как распечатать все элементы массива в одной строке?

Дисплей имеет 2 строки, мне нужно напечатать массив 10,24,32,40,51, ..... первую линию и 10,51 ..... вторую линию

+0

что объяснить о Sprintf: это способ печати, и вы печатаете массив! –

+0

Если у вас есть указатели на массивы, вы также получаете доступ к ним по индексу. –

+0

Paul, yes "% d% d ...% d% d" – jjboy

ответ

0

образец

#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; 
} 
0

Ваших массив имеет 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 плюс завершающий NULL.

Как вы используете sprintf() не snprintf() у вас нет способа проверить, будет ли это переполнение str.

Трудно сказать, что вы делаете из-за форматирования вопроса, но, похоже, вы вызываете функцию array, которая может или не может изменить массив и распечатать его снова. Тем не менее, ваша функция ассемблера определяются как:

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

, который имеет параметр массив/указатель, называемый V, второй параметр называется N (хотя основная программа #define s это до 10 (так что не будет работать), и третий параметр, называемый также V, который не будет работать, как это имя первого параметра.

у вас также есть таинственное X определено 10, который затем используется.

это не особенно ясно, что вам спрашивают, и я t было бы лучше, если бы вы разместили небольшой фрагмент рабочего кода, но я надеюсь, что это поможет.

+0

abligh, спасибо за помощь. Я редактировал свой пост. – jjboy

Смежные вопросы