C strcat()给出错误的附加字符串

时间:2014-08-07 09:26:21

标签: c strcpy strcat

我使用单个字符附加字符串,但我无法正确使用它。我不确定我在哪里弄错了。提前谢谢你的帮助。该方法的原始应用是从用户获得动态输入。

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

void main(){
    int j;
    char ipch=' ';
    char intext[30]="What is the problem";
    char ipstr[30]="";
    printf("Input char: ");
    j=0;
    while(ipch!='\0'){
        //ipch = getchar();
        ipch = intext[j];
        printf("%c", ipch);
        strcat(ipstr,&ipch);
        j++;
    }
    puts("\n");
    puts(ipstr);
    return;
  }

以下是我得到的输出。

$ ./a.out 
Input char: What is the problem

What is h  e

 p
oblem

4 个答案:

答案 0 :(得分:4)

变化

strcat(ipstr,&ipch);

strncat(ipstr, &ipch, 1);

这将强制只追加ipch的一个字节。 strcat()将继续附加一些字节,因为在您追加的char之后没有空终止字符。正如其他人所说,strcat可能会在内存\0中找到某个位置然后终止,但如果没有,则可能导致段错误。

从联系人页面:

char *strncat(char *dest, const char *src, size_t n);

strncat()函数类似于strcat(),除了

  • 它将使用src中最多n个字符;和
  • 如果src包含n个或更多字符,则不需要以null结尾。

答案 1 :(得分:3)

strcat要求其第二个参数是指向格式良好的字符串的指针。 &ipch未指向格式正确的字符串(它指向的字符序列缺少终结空字符)。

您可以使用char ipch[2]=" ";来声明ipch。在这种情况下也使用:

  • strcat(ipstr,ipch);将字符附加到ipstr

  • ipch[0] = intext[j];更改要追加的字符。


在原始程序中将&ipch传递给strcat时会发生什么?函数strcat假定字符串继续,并读取内存中的下一个字节。可能会导致分段错误,但也可能发生strcat读取一些乱码,然后意外地找到空字符。

答案 2 :(得分:0)

strcat()是连接字符串...所以只传递一个char指针是不够的......你必须把那个字符后跟一个'\ 0'字符,然后传递那个东西的指针。如在

/* you must have enough space in string to concatenate things */
char string[100] = "What is the problem";
char *s = "?"; /* a proper '\0' terminated string */
strcat(string, s);
printf("%s\n", string); 

答案 3 :(得分:0)

strcat函数用于连接两个字符串。不是字符串和字符。语法 -

char *strcat(char *dest, const char *src);

所以你需要将两个字符串传递给strcat函数。

在你的程序中

strcat(ipstr,&ipch);

这不是一个有效的陈述。第二个参数ipchchar。你不应该这样做。它会产生Segmentation Fault