我必须保存字符串中有多少个字母,数字,空格和行:
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]'时出现不兼容的类型以及其他错误
该代码有什么问题?
谢谢你, 洛伦佐答案 0 :(得分: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";
答案 1 :(得分:1)
您将字符串声明为char:的大小为2048的数组:
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()
,因为如果字符串大于缓冲区,则更安全。来自man page:
stpncpy()和strncpy()函数最多复制n个字符 s2进入s1。如果s2小于n个字符长,则s1的余数 用'\ 0'字符填充。否则,s1不会被终止。
答案 2 :(得分: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++;
} ...
}
答案 3 :(得分:0)
使用strcpy
而非分配string = "aaa 111\nsas 23 d\nds";
或将字符串数组初始化为char string[2048] = "aaa 111\nsas 23 d\nds";
。