我在这个程序中遇到运行时错误...为什么?

时间:2014-03-30 11:38:11

标签: c

合并两个单词的程序:

#include<stdio.h>

int main()
{ 
    char s1[10],s2[10],s3[10];
    int i,j,n=1;

    for(i=0;i<n;i++)
        scanf("%s",&s1[i]);

    for(i=0;i<n;i++)
        scanf("%s",&s2[i]);

    for(j=0;s2[i];j++)
    { 
        s3[i] = s1[i]+s2[j]; 
    } 
    printf("%s",s3); 
    return 0; 
}

我在这个程序中遇到运行时错误。任何人都可以帮我纠正它或指出错误是什么吗?

6 个答案:

答案 0 :(得分:1)

for(i=0;i<n;i++)
scanf("%s",&s1[i]);
for(i=0;i<n;i++)
scanf("%s",&s2[i]);

这不是你读字符串的方式。试试这个:

scanf("%s", s1);
scanf("%s", s2);

这并不完美,但应该适合初学者。

答案 1 :(得分:0)

scanf("%s",&s1[i]);没有按照您的想法行事。在我看来,您%s%c混淆。这导致缓冲区溢出。请阅读scanf()格式字符串的文档。

然后,不要使用scanf(),因为它不安全且难以正确使用。要获得用户输入,请使用fgets()

答案 2 :(得分:0)

您的代码有几个问题:

  • 您错误地使用scanf。它应该像scanf("%s", s1);同样适用于s2。
  • 要合并两个字符串,您可以使用内置函数strcat将其第二个参数附加到其第一个参数;只需使用它两次就可以在向量s3中合并两个字符串。

总之,您的代码应如下所示:

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

int main()
{ 
   char s1[10],s2[10],s3[20];
   scanf("%s",s1);
   scanf("%s",s2);
   strcat(s3,s1);
   strcat(s3,s2);
   printf("%s",s3); 
   printf("\n");
   return 0; 
}

请记住,您的s3向量必须足够大才能包含两个字符串。

答案 3 :(得分:0)

#include <stdio.h>

int main(void){
    char s1[10], s2[10], s3[20];
    int i, j, n=1;

    scanf("%9s", s1);
    scanf("%9s", s2);

    sprintf(s3, "%s%s", s1, s2);
    printf("%s\n",s3); 
    return 0; 
}

答案 4 :(得分:0)

你可能正在做一个免费的在线课程&#34;编程,数据结构&amp;算法&#34;在https://onlinecourses.nptel.ac.in

无论如何,答案是:

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

int main() {
    char a[20], b[10], c;
    int x[20];
    int i,j,l,n,swap;
    scanf("%s",a);
    scanf("%s",b);
    strcat(a,b);
    l=strlen(a);
    for(i=0; i<l; i++) {
        n = a[i];
        x[i] = n;
    }
    for(i=0; i<(l-1); i++) {
        for(j=0; j<(l-i-1); j++) {
            if(x[j]>x[j+1]) {
                swap = x[j];
                x[j] = x[j+1];
                x[j+1] = swap;
            }
        }
    }
    for(i=0; i<l; i++) {
        c = x[i];
        printf("%c",c);
    }
}

答案 5 :(得分:0)

如果你真的想要this,你应该编辑问题。

首先,如果您声明为char arr[10];,请阅读scanf("%s",arr);

所以你读了两个词:

scanf("%s",s1);
scanf("%s",s2);

好的,现在要合并两个长度为10的单词,首先将结果数组声明为10的两倍。

所以这里是完整的代码:

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

int compare (const void * a, const void * b)
{
  return ( *(char*)a - *(char*)b );
}

int main()
{
    char s1[10],s2[10],s3[20];

    scanf("%s",s1);
    scanf("%s",s2);

    strcpy(s3,s1); // copies content of s1 to s3
    strcat(s3,s2); // merges to end of s3 the content of s2

    qsort(s3,strlen(s3),sizeof(char),compare); //sorts s3

    printf("%s",s3); 
    return 0;

} 

qsort()