0

我必须保存字符串中有多少个字母、数字、空格和行:

char string[2048];
...
string = "aaa 111\nsas 23 d\nds";
for(i = 0; i < strlen(string); i++){
    if (isdigit(string[i]) != 0){
        numbers++;
    } else if (isascii(string[i]) != 0){
        letters++;
    } ...
}

它给了我很多错误,“从类型'char *'分配给类型'char [2048]'时类型不兼容”和其他错误

该代码有什么问题?

谢谢你,洛伦佐

4

4 回答 4

2

尝试,

char string[2048];

strcpy(string,"aaa 111\nsas 23 d\nds");

或者

char string[2048] = "aaa 111\nsas 23 d\nds";

代替

char string[2048];

string = "aaa 111\nsas 23 d\nds";
于 2013-06-17T16:44:55.670 回答
1

简洁版本

您将字符串声明为大小为 2048 的 char 数组:

char string[2048];

这条线引起了麻烦,因为您分配了一个 char* ,它是一个指针:

string = "aaa 111\nsas 23 d\nds";

尝试以下命令,它将遍历 char* 并复制元素直到到达字符串的末尾:

strcpy(string, "aaa 111\nsas 23 d\nds");

如果您只想为此 char[] 赋予初始值,请使用:

char string[2048] = "aaa 111\nsas 23 d\nds";

长版

在这种情况下,您所做的还可以,但在实践中,使用固定大小的字符数组可能很危险。如果您要尝试复制超过 2048 个字符的字符串,您将在为该变量分配的空间之后写入。

您不能只分配的原因是它们是字符数组,它不是 C 中真正定义的操作, char[2048] 只是长度空间上的一种指针2048*sizeof(char)strcpy()将迭代第二个参数并复制字符,直到找到0标记字符串结尾的字符。

您可能需要检查strncpy(),因为如果您有一个大于缓冲区的字符串,它会更安全。从手册页

stpncpy() 和 strncpy() 函数将最多 n 个字符从 s2 复制到 s1。如果 s2 的长度小于 n 个字符,则 s1 的其余部分用 `\0' 字符填充。否则,s1 不会终止。

于 2013-06-17T16:49:38.190 回答
0
char string[2048] = "aaa 111\nsas 23 d\nds";
n = strlen(string);
for(i = 0; i < n; i++){
    if (isdigit(string[i]) != 0){
        numbers++;
    } else if (isascii(string[i]) != 0){
        letters++;
    } ...
}
于 2013-06-17T16:42:46.930 回答
0

使用strcpy而不是分配 likestring = "aaa 111\nsas 23 d\nds";或将字符串数组初始化为char string[2048] = "aaa 111\nsas 23 d\nds";.

于 2013-06-17T16:42:56.717 回答