这是我得到的错误:
#error:IntelliSense:char()类型的值[20]"不可能是 分配给" char "类型的实体(ptr = text)
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 20
void main()
{
char text[][MAX_LEN] = {"hi","bye","kuku","Shalom"};
int lines = sizeof(text)/sizeof(text[0]);
char* ptr ;
for(ptr = text ; ptr < text+lines ; ptr+=MAX_LEN*sizeof(char))
{
if(*ptr >= 'a' && *ptr<= 'z')
*ptr-= ('a' - 'A');
}
for(ptr = text ; ptr < text+lines ; ptr+=MAX_LEN*sizeof(char))
{
puts(ptr);
}
system("pause");
}
答案 0 :(得分:3)
您尝试分配不兼容的类型。 char [][]
无法分配到char *
。
试试这个:
for(ptr = text[0] ; ptr < text[lines] ; ptr+=MAX_LEN*sizeof(char))
答案 1 :(得分:2)
for
循环中的此分配不正确 -
ptr = text
ptr
是char *
,text
是char
的二维数组。
你可以这样做 -
ptr = text[i] // where i is index ,and will represent the string at that index
/* or something similar to get values at different indexes */
为了进行比较,您可以执行此操作ptr < text[lines]
或ptr< *(text+lines)
答案 2 :(得分:2)
问题是text
是一个数组数组,但是你试图在比较和赋值中使用它的名字作为指针。如果你坚持自己做指针数学,你当然可以这样做:
for(ptr = &text[0][0] ; ptr < &text[0][0]+(lines*MAX_LEN) ; ptr+=MAX_LEN) {
...
}
请注意,sizeof(char)
的乘法消失了,因为在所有符合标准的实现(demo)中它总是1
。
更好的方法是使用指向数组的指针,让C为你做指针数学,如下所示:
char (*ptr)[MAX_LEN];
for(ptr = text ; ptr < text+lines ; ptr++) {
char *firstLetter = *ptr;
if(*firstLetter >= 'a' && *firstLetter <= 'z')
*firstLetter -= ('a' - 'A');
}
for(ptr = text ; ptr < text+lines ; ptr++) {
puts(*ptr);
}
既然ptr
的类型为“MAX_LEN
字符数组的指针”,++
负责将其推进到适当的距离而不使用MAX_LEN
( demo)。