2015-02-18 3 views
-1

В моем коде ниже:Определить размер адреса, присвоенного указателя

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define SIZ 256 //arbitrary value 

typedef char text_t; 
text_t text[SIZ]; 


text_t *create_text() 
{ 
    text_t *c; 
    strcpy(text,""); 
    c= text; 
    return c; 
} 


int main() 
{ 

text_t *point_to_text; 

point_to_text=create_text(); 

printf("length of the returned pointer") 

    return 0; 

} 

Я хочу, чтобы назначить point_to_text строку нулевой длины. Я использовал strcpy(text,"");, чтобы скопировать пустую строку. Как я могу показать, что длина текста в этом случае равна нулю. Кроме того, если я использую strcpy(text,"abc");, как я могу показать длину в этом случае 3?

+2

Sidenote: В C, если функция принимает не имеет параметров, вы должны использовать 'void' вместо пустого списка параметров:' text_t * create_text (void) '. Кроме того, функция 'main' имеет только две стандартные формы в размещенных средах:' int main (void) 'или' int main (int argc, char * argv []) '. – user694733

ответ

2

Вы можете использовать

length = strlen(point_to_text); 

строковых литералов в C означает ASCII коды символов, хранящиеся в ячейке памяти последовательного завершенного нулевого символа (\ 0).

strlen() ожидает, что вход будет указателем на константную строку символов, завершенную нулевым символом (0 или '\ 0'). Функция возвращает длину строки, исключая нулевой символ.

+1

, в то время как этот блок кода может ответить на вопрос, вы должны попытаться включить соответствующее объяснение, чтобы улучшить свой ответ. см. http://stackoverflow.com/help/how-to-answer – SMR

1

Вам нужно использовать strlen() по возвращенной стрелке point_to_text.

Предполагая, что вы возвращаете правильную строки [т.е. завершающего нуль], strlen() даст вам длину строки, то есть, число действительных элементов, присутствующие в строки (исключая нуль-терминатор).

Вы можете сделать

printf("length of the returned string is %zu\n", strlen(point_to_text)); 
+0

'strlen()' возвращает 'size_t', который probaby является' unsigned long'. POSIX определяет 'zu' для' size_t'. – alk

+0

@alk Спасибо, сэр. Обновлено. –

+0

Я заметил, что он возвращает unsigned long. Почему он возвращает UL, а не целое число, поскольку я предполагаю, что длина должна возвращать целое число, а is% zu представляет unsigned long или% ld? почему мы используем% zu? – Arnold