str[i] = vet[i]+'0'
Это очень хакерский способ сделать это и будет работать ТОЛЬКО для чисел 0-9.Вот почему, если вы еще не знаете:
Числа 0-9 получили десятичные значения, ну, очевидно, 0-9.Вот десятичные значения для символов ASCII для 0-9
'0' = 48
'1' = 49
'2' = 50
'3' = 51
'4' = 52
'5' = 53
'6' = 54
'7' = 55
'8' = 56
'9' = 57
Итак, поместив, например, 4 +'0'
в массив char, вы фактически добавляете 52. Форматирование %s
- это то, что заставляет printf интерпретировать этокак код ASCII вместо целого числа.Вы можете попытаться сделать str[0] = 52;
, и это все равно будет печатать символ 4 в качестве первого символа в строке, если используется с %s
Теперь, если вы сделаете 10 + '0'
, вы добавите 58, что являетсяКод ASCII для :
Чтобы обойти это, вы можете использовать функцию sprintf()
. Она может печатать число в виде строки в предоставленный буфер.Помните, что 10 не существует как один символ, а является строкой, содержащей 1 и 0. Пример кода:
FILE *myFile;
char str[80];
char *p = str;
int vet[5] = {0, 1, 2, 3, 4};
int i;
for(i=0; i<5; i++){
//Take the number at vet[i] and print it as a string to the buffer.
//The pointer is increased by the amount of characters written
p = sprintf(p, "%d ", vet[i]);
}
//Remove trailing space
str[strlen(str) - 1] = '\0';
printf("%s", str);
if(!(myFile = fopen("file.txt","w"))){
printf("Error!\n");
exit(1);
}
fprintf(myFile, str);
fclose(myFile);
Это должно работать для любого числа в массиве vet