虽然代码很好但为什么我会收到错误?

时间:2016-01-29 13:43:44

标签: c

这是我得到的错误:

  

#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");
}

3 个答案:

答案 0 :(得分:3)

您尝试分配不兼容的类型。 char [][]无法分配到char *

试试这个:

for(ptr = text[0] ; ptr < text[lines] ; ptr+=MAX_LEN*sizeof(char))

答案 1 :(得分:2)

for循环中的此分配不正确 -

ptr = text

ptrchar *textchar的二维数组。

你可以这样做 -

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_LENdemo)。