Итак, у меня есть код C:
#include <stdio.h>
#include <string.h>
/* putting one of the "char*"s here causes a segfault */
void main() {
char* path = "/temp";
char* temp;
strcpy(temp, path);
}
Это компилируется, запускается и ведет себя так, как выглядит. Однако если один или оба указателя символов объявлены как глобальные переменные, strcpy приводит к ошибке сегментации. Почему это происходит? Очевидно, в моем понимании масштаба есть ошибка.
snprintf(buffer, buffer_len, "%s", src), так как snprintf всегда ставит нулевой терминатор (просто убедитесь, что buffer_len > 0). - person Joey Adams   schedule 05.08.2011strlcpy. К сожалению, glibc не поддерживает его, поэтому у меня мало шансов его использовать. Я полагаю, что всегда мог бы свернуть свою собственную реализацию и добавить ее в свою личную библиотеку заголовков функций malloc и файлов, проверяющих значение null, но меня все еще раздражает, что во многих версиях Unix она есть, а в Linux ее обычно нет. - person JAB   schedule 05.08.2011strlcat, так и дляstrncat[такая же разница, как междуstrlcpyиstrncpyв отношении того, как они работают и что их реализует] версий выполняемой операции, поэтому нужно было просто закомментировать одну из них. строку и раскомментировать строку после.) ...Не ожидал, что потребуется так много полей для комментариев. - person JAB   schedule 05.08.2011