Добавить форматированную строку к строке в C (не в C ++) без арифметики с указателями? - PullRequest
3 голосов
/ 08 января 2010

Написал очень простую функцию C, чтобы проиллюстрировать то, что я хотел бы упростить:

void main(int argc, char *argv[]){
    char *me="Foo";
    char *you="Bar";
    char us[100];
    memset(us,100,0x00);

    sprintf(us,"You: %s\n",you);
    sprintf(us+strlen(us),"Me: %s\n",me);
    sprintf(us+strlen(us),"We are %s and %s!\n",me,you);
    printf(us);
}

Кажется, должна быть стандартная библиотечная функция для обработки того, что я делаю с помощью sprintf и перемещения указателя, нет? Прошло лет с тех пор, как я сделал любое количество C ...

Спасибо, -Л

Ответы [ 5 ]

10 голосов
/ 08 января 2010

sprintf возвращает количество написанных не NUL символов.

int len = 0;
len += sprintf(us+len, ...);
len += sprintf(us+len, ...);
...
2 голосов
/ 08 января 2010

Хм ... не могли бы вы просто использовать что-то вроде:

sprintf(us, "You: %s\nMe: %s\nWe are %s and %s!\n, you, me, me, you);
1 голос
/ 08 января 2010

Никогда не используйте непостоянную строку в качестве первого аргумента для printf (или второго аргумента для fprintf. Это плохая практика. Попробуйте изменить переменную me на "Muahaha %n%d%n%d%n%d%n%d%n" и попрощайтесь со своим стеком и поздоровайтесь с SEGFAULT. printf попытается отформатировать строку, но вы не предоставили никаких аргументов для ее обработки, и хотя в строке есть спецификаторы формата printf не знает, что у вас нет ' не приводя никаких аргументов.

Если вы хотите вывести предварительно отформатированную строку, используйте fputs(str,stdout). В редких случаях можно использовать printf со строкой непостоянного формата.

1 голос
/ 08 января 2010
char *me="Foo";
char *you="Bar";
char us[100];

char* out = us;
out += sprintf(out,"You: %s\n",you);
out += sprintf(out,"Me: %s\n",me);
out += sprintf(out,"We are %s and %s!\n",me,you);
printf("%s", us);
1 голос
/ 08 января 2010

Вы, вероятно, ищете strcat (или даже лучше strncat ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...