2016-04-08 5 views
-1

Zum einen, bevor ich erklären, hier ist der Code in C:Wie finden Sie die Größe einer Zeichenfolge in einer Funktion in C?

#include <stdio.h> 

void printSize(char* str); 

int main() 
{ 
    char a[100] = "StackOverflow"; 
    printSize(a); 
    return 0; 
} 

void printSize(char* str) 
{ 
    int n = sizeof(str)/sizeof(char); 
    printf("%d" ,n); 
} 

Wie Sie schon sehen, ich versuche, meine Funktion zu erhalten, den Wert „100“ zu drucken, wie 100 ist die Größe, die ich zugewiesen haben zu meinem char Array a. Jedoch bekomme ich 8 als meine Antwort. Jetzt weiß ich, warum ich hier 8 bekomme, weil es die Größe des Zeigers druckt. Also meine Frage ist, wenn ich diese Methode nicht verwenden kann, um den Wert von "100" auszudrucken, wie kann ich dann den Speicher herausfinden, der a aus der Funktion zugewiesen ist?

Dank

+2

Sie können es nicht mit einfachen Methoden finden. Normalerweise wird der Funktion ein weiterer Parameter hinzugefügt, 'int size', der die Größe des Arrays angibt. – atturri

+0

[Die Länge eines Zeichen-Arrays in C finden] (http://stackoverflow.com/q/4180818/995714) –

+0

Also gibt es grundsätzlich keine Möglichkeit, es in C zu tun? – theprogrammer094

Antwort

3

Um die Länge einer Zeichenfolge Sie die strlen Funktion zu erhalten. Um die Größe des Arrays zu erhalten, müssen Sie es als Argument übergeben.

Wenn Sie die Größe eines Zeigers erhalten, erhalten Sie die Größe des tatsächlichen Zeigers und nicht, worauf es hinweist. In Ihrem Fall scheinen Sie sich auf einer 64-Bit-Plattform zu befinden, auf der Zeiger 64 Bit (8 Byte) sind, und teilen diese dann durch sizeof(char) (was definiert ist, immer 1 zu sein) Sie erhalten den Wert 8.

+3

'#include ' für 'strlen()'. – jdarthenay

+0

Ja, ich weiß über Strlen und den Grund, warum ich immer 8 als Ausgabe bekam, aber es ist sowieso, um dies zum Funktionieren zu bringen, ohne einen dritten Parameter in meiner Funktion hinzuzufügen und auch kein zusätzliches int Byte in meinem zugewiesenen Speicher hinzuzufügen Größe? – theprogrammer094

+0

@ rohitkrishna094 Nein, es gibt keinen Weg. Sobald ein Array zu einem Zeiger verfallen ist, haben Sie nur noch den Zeiger und Sie haben alle semantischen Informationen verloren, die der Compiler für das Array gehabt haben könnte. –