C字符串连接不起作用
我对C语言完全陌生,所以请容忍我。下面程序的目的是从用户处获取一个字符串输入,将其拆分为“-”字符,然后连接所有单独部分的第一个字符。例如:C字符串连接不起作用,c,string,C,String,我对C语言完全陌生,所以请容忍我。下面程序的目的是从用户处获取一个字符串输入,将其拆分为“-”字符,然后连接所有单独部分的第一个字符。例如: Rivest-Shamir-Adleman 应返回: RSA 该代码在拆分部分都能正常工作。input变量存储用户输入,result是存储实际连接结果的字符指针,我使用strtok()函数实际拆分字符串。但以下连接部分不起作用: *result++ = token[0]; 在上面的示例中,result变量应该打印RSA,但它只是打印-。我做错了什么
Rivest-Shamir-Adleman
应返回:
RSA
该代码在拆分部分都能正常工作。input
变量存储用户输入,result
是存储实际连接结果的字符指针,我使用strtok()
函数实际拆分字符串。但以下连接部分不起作用:
*result++ = token[0];
在上面的示例中,result
变量应该打印RSA
,但它只是打印-
。我做错了什么
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *input;
char *result;
input = malloc(256); //don't read more than 255 chars.
result = malloc(50); //don't read more than 50 chars.
scanf("%s", input);
printf("You entered %s\n", input);
printf("Length is: %u\n", strlen(input));
char *token = strtok(input,"-");
while(token) {
printf("%c\n", token[0]);
*result++ = token[0];
token= strtok(NULL, "-");
}
*result++ = '\0';
printf("result: %s\n",result);
return 0;
}
#包括
#包括
#包括
内部主(空)
{
字符*输入;
字符*结果;
input=malloc(256);//读取的字符数不要超过255个。
result=malloc(50);//读取的字符不要超过50个。
扫描频率(“%s”,输入);
printf(“您输入了%s\n”,输入);
printf(“长度为:%u\n”,strlen(输入));
char*token=strtok(输入“-”);
while(令牌){
printf(“%c\n”,标记[0]);
*结果++=token[0];
令牌=strtok(空,“-”;
}
*结果+++='\0';
printf(“结果:%s\n”,结果);
返回0;
}
这很好用。只是保留结果字符串的开头<代码>结果=温度代码>输出相同的答案
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *input;
char *result, *temp;
input = malloc(256); //don't read more than 255 chars.
temp = malloc(50); //don't read more than 50 chars.
result = temp;
scanf("%s", input);
printf("You entered %s\n", input);
printf("Length is: %u\n", strlen(input));
char *token = strtok(input,"-");
while(token) {
printf("%c\n", token[0]);
*temp++ = token[0];
token= strtok(NULL, "-");
}
*temp++ = '\0';
printf("result: %s\n",result);
return 0;
}
#包括
#包括
#包括
内部主(空)
{
字符*输入;
字符*结果,*温度;
input=malloc(256);//读取的字符数不要超过255个。
temp=malloc(50);//读取的字符不要超过50个。
结果=温度;
扫描频率(“%s”,输入);
printf(“您输入了%s\n”,输入);
printf(“长度为:%u\n”,strlen(输入));
char*token=strtok(输入“-”);
while(令牌){
printf(“%c\n”,标记[0]);
*temp++=token[0];
令牌=strtok(空,“-”;
}
*temp++='\0';
printf(“结果:%s\n”,结果);
返回0;
}
printf(“结果:%s\n”,结果)代码>:result
不是字符串的顶部。当您执行result++
时,result
中的指针会发生什么情况?之后它指向哪里?所以当你想打印结果时,它实际上指向哪里?@Someprogrammerdude理想情况下,它应该指向内存堆栈中的下一个字符-这是我从示例中收集的,但显然不是(尽管我已经做了malloc
)。@BLUEPIXY如果我理解正确,结果
需要返回到第一个内存位置才能打印值?C字符串是以零结尾的字符序列,到目前为止您是正确的。但“字符串”本身通常是指向其第一个字符的指针。字符串函数就是这样工作的,它们有一个指针,然后沿着内存继续运行,直到它碰到终止符。当您尝试打印result
时,它指向终止符之外。printf(“长度为:%u\n”,strlen(输入))代码>->printf(“长度为:%zu\n”,strlen(输入))代码>或printf(“长度为:%u\n”,(无符号)strlen(输入))
@chqrlie%zu
似乎由于某些原因只能在linux上工作,而不能在windows上工作(至少使用gcc编译器)。@PrahladYeri:更准确地说,这是一个库问题:%zu
不受Microsoft运行时C库的支持%zu
作为标准C的一部分已经有18年了,Linux、MacOS和许多其他系统都支持它。在旧式系统上,您可能必须使用变通方法:printf(“长度为:%u\n”,(未签名)strlen(输入))
%u
在Windows 64位中是不合适的,因为大小\u t
大于无符号的。