Вы не можете изменить строковый литерал таким образом, он не определен в соответствии со стандартом. Вы пытаетесь перезаписать этот строковый литерал другими данными (sprintf
).
Многие реализации помещают их в постоянную память, вызывая дамп ядра - они хорошие. Плохие будут продолжаться, как будто все в порядке, чего обычно не бывает.
Вы можете попробовать следующее:
#include <stdio.h>
int main (void) {
char *name;
char name2[100]; // make sure plenty of space.
name = "James Bond";
int i = 0;
sprintf (name2, "%s/%d", name, i);
printf ("String is %s\n", name2);
return 0;
}
Большинство вопросов этого типа имеют такой код:
name = "Bob";
*name = 'J'; // to try and make "Job"
но просто как неопределенный для записи в строковые литералы, используя также sprintf
.
Основываясь на комментариях, вы хотите иметь возможность комбинировать путь и спецификацию файла. Вы можете сделать это примерно так:
char *path = "/tmp/";
char *file = "xyz.txt"
char fullpath = malloc (strlen (path) + strlen (file) + 1);
if (fullpath == NULL)
// error and exit condition
strcpy (fullpath, path);
strcat (fullpath, file);
// use fullpath for your nefarious purposes :-)
free (fullpath);
Это один способ сделать это, есть другие.