Как получить всю строку по указателю
Да, OP хорошо понимает в комментарии , что печатать содержимое строки выходной сигнал начинается с s[0]
и продолжается до тех пор, пока s[i]
не станет равным нулю.Последний элемент string , нулевой символ не печатается.
Примечание: printf(s)
- это bad code asprintf()
ожидает, что первый аргумент будет не только указателем на строку , но и будет интерпретироваться как формат .Если происходит '%'
, следующие символы будут интерпретироваться как спецификатор @ MM .Вместо этого:
printf("%s", s);
// or
fputs(s, stdout);
Такие функции, как strlen(), strcpy(), strcat()
, также проводят довольно много времени, прогуливаясь по длине строки для определения его длины.Для длинных струн это может занять значительное время.
Этот утомительный бег по всей длине струны может иметь серьезные последствия.Рассмотрим s
указателей на строку длиной n
.
for (i=0; i<strlen(s); i++) {
s[i] = 'x';
}
против
for (i=0; s[i] != '\0'; i++) {
s[i] = 'x';
}
При компиляции первого фрагмента кода может не отображаться, что длина строки не изменяется(поскольку строка изменяется) за одну итерацию, а затем вызывайте strlen(n)
n
раз, каждый вызов занимает n
операций или общее O(n*n)
время.2-й код будет принимать только порядка n
операций за время (n).
Эффективный код C распознает это и избегает повторных вычислений длины.