C字符串连接不起作用

C字符串连接不起作用,c,string,C,String,我对C语言完全陌生,所以请容忍我。下面程序的目的是从用户处获取一个字符串输入,将其拆分为“-”字符,然后连接所有单独部分的第一个字符。例如: Rivest-Shamir-Adleman 应返回: RSA 该代码在拆分部分都能正常工作。input变量存储用户输入,result是存储实际连接结果的字符指针,我使用strtok()函数实际拆分字符串。但以下连接部分不起作用: *result++ = token[0]; 在上面的示例中,result变量应该打印RSA,但它只是打印-。我做错了什么

我对C语言完全陌生,所以请容忍我。下面程序的目的是从用户处获取一个字符串输入,将其拆分为“-”字符,然后连接所有单独部分的第一个字符。例如:

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
大于
无符号的