为何这段C语言代码无法正常打印字符串?
问题分析与修复
你的代码存在两个核心问题,导致无法正常输出所有形容词:
1. 循环条件错误
sizeof(adj)计算的是整个指针数组的总字节数,而非数组内的元素个数。比如在64位系统中,每个指针占8字节,4个元素的数组总大小为32,这会让循环执行32次,远超实际元素数量,后续迭代会访问非法内存。
正确的元素个数计算方式是 sizeof(adj)/sizeof(adj[0]),用数组总字节数除以单个元素的字节数,得到准确的元素数量。
2. printf参数错误
adj[i]本身就是指向字符串的指针,直接传给%s格式符就能打印完整字符串。而你写的*adj[i]是取字符串的第一个字符(char类型),把它传给%s会被当成无效内存地址,因此无输出;传给%c则只会打印这个首字符。
修复后的代码
#include<stdio.h> #include<stdlib.h> int main(){ const char *adj[] = {"swag","nice","asparagus","ugly"}; // 计算数组元素个数 int adj_count = sizeof(adj)/sizeof(adj[0]); for (int i=0; i<adj_count; i++) printf("you are extremely %s\n", adj[i]); return 0; }
运行结果
执行后会依次输出:
you are extremely swag you are extremely nice you are extremely asparagus you are extremely ugly
内容的提问来源于stack exchange,提问作者casimaister
相关产品推荐
相关产品推荐

