Для тренировки своих навыков программирования на C я пытаюсь написать функцию strncpy самостоятельно. Делая это, я продолжал натыкаться на ошибки, решая большинство из них, в конце концов я застрял без дальнейшего вдохновения, чтобы продолжать.
Ошибка, которую я получаю:
ex2-1.c:29:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
printf("The copied string is: %s.\n", stringb);
Дело в том, что это очень распространенная ошибка, и она также уже описана на SO, только я не могу применить советы, на которые уже указали другие люди. Я понимаю, что использую неправильный тип при печати переменной, и когда я использую формат% d, он возвращает целое число, которое, вероятно, является значением ASCII первого символа, поскольку оно не изменяется при увеличении максимального числа байтов для копирования.
Используя GDB, я обнаружил, что переменная b при выполнении итерации цикла while содержит правильную строку, но я не могу ее напечатать.
Мне, вероятно, не хватает очень фундаментальной части знаний о языке C, и я прошу прощения за этот вопрос новичка (еще раз). Также я был бы признателен, если бы вы могли оставить отзыв или указать на другие недостатки в моем коде.
#include <stdlib.h>
#include <stdio.h>
void strmycpy(char **a, char *b, int maxbytes) {
int i = 0;
char x = 0;
while(i!=maxbytes) {
x = a[0][i];
b[i] = x;
i++;
}
b[i] = 0;
}
int main (int argc, char **argv) {
int maxbytes = atoi(argv[2]);
//char stringa;
char stringb;
if (argc!=3 || maxbytes<1) {
printf("Usage: strmycpy <input string> <numberofbytes>. Maxbytes has to be more than or equal to 1 and keep in mind for the NULL byte (/0).\n");
exit(0);
} else {
strmycpy(&argv[1], &stringb, maxbytes);
printf("The copied string is: %s.\n", stringb);
}
return 0;
}
stringb
этоchar
, а неchar*
. - person Zeta   schedule 21.11.2013stringb
- это char (который повышается до int при передаче вprintf()
). Вам нужно будет объявить его как массив соответствующего размера. Действительно, еще раз. - person   schedule 21.11.2013%s
требуется адрес последовательности символов, которая заканчивается нулевым символом. Вы передаете символ, а не адрес последовательности символов и, конечно же, не тот, который заканчивается нулевым символом. - person WhozCraig   schedule 21.11.2013