我试图使用" char getlastc(char *)"返回传递数组的最后一个字符。功能,但它没有在主显示(它什么都没显示),虽然我尝试了很多时间来寻找bug但是找不到。请指出我的问题。
#include <stdio.h>
char getlastc(char* array) {
char c;
while(c = *array) {
if(*array++ == '\0') {
return c;
}
}
}
int main() {
char array[50] = "Hello World";
char *array1 = "Hello World";
printf("%c %c", getlastc(array), getlastc(array1));
return 0;
}
答案 0 :(得分:1)
if()
中的getlastc()
语句永远不会评估为true
。
您可能想要做的是使用preincrement运算符而不是postincrement:
if(*++array == '\0') return c;
否则,您在每次迭代时测试相同的字符两次,除了(c = *array)
求值为false
且函数退出(没有返回值)的最后一次迭代。
修改强>
还有一个问题是,当空字符串传递给此函数时,while()
循环根本不会执行。这是一个更简单的选择:
char getlastc(char* array) {
if (!*array) return '\0';
while (*array) array++;
return *--array;
}
答案 1 :(得分:1)
*array++
返回的字符与分配给c
的字符相同。这是因为我们取消引用array++
返回的指针,这是array
之前递增的值。
此外,如果输入空字符串,则函数不返回任何内容。
使用预增量和一点点改组,我们可以很好地解决这个问题:
char c;
while(c = *array) {
if(*++array == '\0') {
break;
}
}
return c;
现在我们将返回输入字符串的最后一个字符,或者在我们传递空字符串的情况下返回'\0'
。
作为旁注,您可能希望在printf()
中添加换行符。
答案 2 :(得分:0)
已经接受的答案,但该功能必须在所有情况下返回一个值。这也处理空字符串(返回可打印字符)。
#include <stdio.h>
char getlastc(char *array) {
char c = *array;
while(*++array) {
c = *array;
}
if(!c) {
c = '?'; // the empty string
}
return c;
}
int main()
{
char array[50] = "Hello World";
char *array1 = "Hello World";
char *array2 = "42";
char *array3 = ""; // the empty string
printf("%c %c %c %c\n", getlastc(array), getlastc(array1), getlastc(array2), getlastc(array3));
return 0;
}
节目输出:
d d 2 ?