对字符数组元素类型的混淆

标签 c

我正在为 C 字符数组的元素类型而苦苦挣扎。

char get_final (char *num_str)
{
    int len = strlen(num_str);
    char val;
    val = num_str[len-1];
    printf("the number is %s\n", num_str);
    printf("the length is %d\n", len);
    printf("the last digit is %s\n", val);
    printf("the last digit is %s\n", num_str[len-1]);
    return val;
}


int main() {
    char num[4] = "123";
    int last;
    last = get_final(num);
    printf("final: the last digit is %d\n", last);
}

当我编译它时,我在打印函数中最后一位数字时收到警告,格式 %s 需要一个字符,但我给它一个整数。但是我已经将变量 val 声明为 char,并且我从字符数组中为它分配了一个元素。那么为什么要投诉整数类型呢?

当我运行代码时,它会在同一点发生段错误。

我该如何解决这个问题?

最佳答案

替换

printf("the last digit is %s\n", val);
printf("the last digit is %s\n", num_str[len-1]);

printf("the last digit is %c\n", val);
printf("the last digit is %c\n", num_str[len-1]);

通过将 %s 放在 printf 中,您是说您想要打印一个字符串(由 char 指向的以 0 结尾的字符数组*), 不是字符。但是 valnum_str[len-1] 都是字符,所以你应该使用 %c 来代替。

关于对字符数组元素类型的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048346/

相关文章:

python - 文件指针上是否存在与 Python next() 等效的 C 语言?

在 Mac OSX 10.11.6 上找不到 clock_gettime

c - 如何在单个 gcc 命令中将多个 header 包含和库目录添加到搜索路径?

c - 为什么 char *T = "hello";不给内存泄漏?

c - 算法的时间复杂度(嵌套循环)

c - 在 C 中递归地从链表中删除元素

c - 结构成员的大小

c - Gtk如何计算字符串的宽度(以像素为单位)

c - C 中#error 指令的输出

c++ - 案例语句中的省略号是标准 C/C++