我還有一個練習C我的課。該代碼不會崩潰,但不能按預期工作。顯然我犯了一個我找不到的錯誤。 作業如下: 用戶輸入兩個字符c1和c2以及整數n,您必須創建一個動態創建的函數並返回一個字符串,其中包含n個字符,如下所示:c1c2c1c2c1c2等 例如: c1 = a和c2 = s和n = 4字符串是:asas這個C代碼有什麼問題? (不按預期工作)
但是,我創建的數組不包含c1和c2,但是來自ASCII表中的一些隨機字符。加上這裏:
printf("\nThe string is: %s\n",s);
在屏幕的輸出是這樣的:大江字符串是:我(字符串的insted的是:S-無論小號是 - ) 這裏有一張照片,從該.exe文件的鏈接:
#include <stdio.h>
#include <stdlib.h>
char* alternate(char c1,char c2,int n)
{
int i;
char *s;
s=(char*)malloc((n+1)*sizeof(char));
if(s==NULL)
{
puts("Could not allocate memory!");
exit(1);
}
for(i=0;i<n;i++);
{
if(i%2==0)
s[i]=c1;
else
s[i]=c2;
}
s[i]='\0';
return s;
}
main()
{
char c1,c2,*s;
int n;
puts("Give two characters: ");
scanf("%c %c",&c1,&c2);
fflush(stdin);
puts("Give an integer: ");
scanf("%d",&n);
s=alternate(c1,c2,n);
printf("\nThe string is: %s\n",s);
free(s);
system("pause");
}
預先感謝您!
你試過在一個調試器中運行呢?逐步運行以檢查所有工作是否正常。你也應該檢查'scanf'的返回值來看它是否成功。 – 2013-03-23 15:20:46
您不需要在C程序中投射'malloc()'的返回值。 'sizeof(char)'是'1'。 – 2013-03-23 15:21:04
@CarlNorum感謝您的提示!我們的教授告訴我們這樣做(類型轉換),以使代碼與C和C++編譯器兼容。 – syfantid 2013-03-23 15:47:20