用C语言处理字符串

用C语言处理字符串,c,string,character,ascii,digit,C,String,Character,Ascii,Digit,我必须保存字符串中有多少字母、数字、空格和行: 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++; } ... } cha

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

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字符串[2048];
...
string=“aaa 111\nsas 23 d\nds”;
对于(i=0;i
它给我带来了许多错误,“当从类型“char*”分配给类型“char[2048]”时,类型不兼容”以及其他错误

那代码有什么问题

谢谢,, Lorenzo

字符串[2048]=“aaa 111\nsas 23 d\nds”;
n=strlen(字符串);
对于(i=0;i
charstring[2048]=“aaa 111\nsas 23 d\nds”;
n=strlen(字符串);
对于(i=0;i
使用
strcpy
而不是像
string=“aaa 111\nsas 23 d\nds”那样赋值或将字符串数组初始化为
字符字符串[2048]=“aaa 111\nsas 23 d\nds”

使用
strcpy
而不是像
string=“aaa 111\nsas 23 d\nds”那样赋值或将字符串数组初始化为
字符字符串[2048]=“aaa 111\nsas 23 d\nds”

试试看

char string[2048];

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

而不是

char string[2048];

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

而不是

char string[2048];

string = "aaa 111\nsas 23 d\nds";
短版 您将字符串声明为大小为2048的字符数组:

char string[2048];
这一行造成了问题,因为您分配了一个char*,它是一个指针:

string = "aaa 111\nsas 23 d\nds";
尝试以下命令,该命令将在char*上迭代并复制元素,直到到达字符串末尾:

strcpy(string, "aaa 111\nsas 23 d\nds");
如果只想为该字符[]指定初始值,请使用:

char string[2048] = "aaa 111\nsas 23 d\nds";
长版本 在这种情况下,您所做的是可以的,但在实践中,使用固定大小的字符数组可能是危险的。如果您试图复制2048个字符以上的字符串,您将在分配给此变量的空间之后写入

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

您可能需要检查
strncpy()
,因为如果字符串大于缓冲区,则更安全。从:

stpncpy()和strncpy()函数最多从 s2转化为s1。如果s2的长度小于n个字符,则s1的剩余部分 用“\0”字符填充。否则,s1不终止

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

char string[2048];
这一行造成了问题,因为您分配了一个char*,它是一个指针:

string = "aaa 111\nsas 23 d\nds";
尝试以下命令,该命令将在char*上迭代并复制元素,直到到达字符串末尾:

strcpy(string, "aaa 111\nsas 23 d\nds");
如果只想为该字符[]指定初始值,请使用:

char string[2048] = "aaa 111\nsas 23 d\nds";
长版本 在这种情况下,您所做的是可以的,但在实践中,使用固定大小的字符数组可能是危险的。如果您试图复制2048个字符以上的字符串,您将在分配给此变量的空间之后写入

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

您可能需要检查
strncpy()
,因为如果字符串大于缓冲区,则更安全。从:

stpncpy()和strncpy()函数最多从 s2转化为s1。如果s2的长度小于n个字符,则s1的剩余部分 用“\0”字符填充。否则,s1不终止


是的,问题是我通过从客户端读取(套接字..)来获取该字符串。。代码在服务器中,字符串通过套接字到达,所以它是这样的:read(client_socket,string,2048);那么就不需要复制字符串了?直接使用字符串?@lore\u barba如果从客户端套接字读取字符串,则可以使用
strcpy
复制该字符串。参考C&Strings的基础知识是的,你是对的,也许我必须做strcpy。。我还没有尝试过,但我认为这是正确的解决方案是的,问题是我通过从客户端读取(套接字..)来获取字符串。。代码在服务器中,字符串通过套接字到达,所以它是这样的:read(client_socket,string,2048);那么就不需要复制字符串了?直接使用字符串?@lore\u barba如果从客户端套接字读取字符串,则可以使用
strcpy
复制该字符串。参考C&Strings的基础知识是的,你是对的,也许我必须做strcpy。。我还没有尝试过,但我认为这是正确的解决方案。顺便说一句,很高兴它很有用,即使你不是使用
char[]
而是使用
char*
,如果你要写
string1=string2
,你不会复制字符串,而只是更改指针值以指向相同的内存空间。顺便说一句,很高兴它很有用,即使使用的不是
char[]
而是
char*
,如果要编写
string1=string2
,也不会复制字符串,只需更改指针值以指向相同的内存空间。