【发布时间】:2018-07-03 23:39:18
【问题描述】:
我有一个函数返回指向 C 中的字符串的指针,我正在尝试访问整个字符串,但我不确定如何访问。
我有一个函数,它循环抛出一个包含学生数据的结构链接列表并获取学生的姓名。我想在每个字符串的末尾填充空格,以便它们的大小相同。所以我写了一个函数来填充字符串。该函数返回一个指向字符串的指针,但我不知道如何从指针访问整个字符串。我知道我可以使用 *pstring 来获取字符串的第一个字符,但我对如何获取其余部分有点迷茫。
这循环通过链表:
void myFunction(void) {
pStudent = pHead;
char paddedName[30];
long nameLength = 0 ;
while(pStudent->pNext != NULL){
printf("%c,\n", *padstring(pStudent->name));
strcpy(paddedName, padstring(pStudent->name));
nameLength = strlen(paddedName);
printf("%lu | %s | %s \n", nameLength, paddedName, pStudent->name);
pStudent = pStudent->pNext;
}
printf("\n");
}
这填充并返回字符串:
char *padstring(char* string){
char name[30];
int i = 0;
while(i < 30){
if(i < strlen(string)){
name[i] = string[i];
}
else{
name[i] = ' ';
}
i++;
}
printf("%s,\n", name);
return name;
}
【问题讨论】:
-
你不能像现在这样返回名字。它是一个在栈上创建的局部变量,当函数退出时“消失”。
-
试图从函数中返回一个本地字符数组是一个常见的错误。许多基本类型(char、int、float、double 等)甚至结构都可以返回,因为编译器返回一个副本。本地字符数组变量是指向堆栈上“数组”(连续)字符的指针。指针的值正确返回,但函数退出时堆栈回滚,因此结果指向的字符数组不再有效。任何类型的本地数组也是如此。
标签: c string function pointers