c程序本身没看到错误,但一运行输入数据后就报错,而且不知道哪里出错 关于这个C程序,为什么检查没有错误,可是一旦输入数据运行就出...

C\u8bed\u8a00\u7684\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u8fd0\u884c\uff0c\u4f46\u662f\u8f93\u5165\u5b8c\u6570\u636e\u540e\uff0c\u5c31\u4f1a\u62a5\u9519\uff0c\u4e0d\u77e5\u9053\u54ea\u51fa\u95ee\u9898\u4e86\uff0c\u6c42\u5927\u5e08\u4eec\u5e2e\u5e2e\u5fd9

\u8c03\u6574\u4e00\u4e0b\u8bed\u53e5\u7684\u987a\u5e8f\u5c31\u884c\u4e86\uff0c\u770b\u6ce8\u91ca

#include
#include
#define SIZE 3
#define LIM 50
void put(char **str);
void put1(char *str);
int main(void)
{
int n=0;
char a[SIZE][LIM];
char *p[SIZE];
while(n<SIZE && gets(a[n])) // \u5148\u5224\u65adn<SIZE\uff0c\u5728\u51b3\u5b9a\u80fd\u5426\u7ee7\u7eed\u8f93\u5165
{
p[n]=a[n];
n++;
}
put(p);
return 0;
}
void put(char **str)
{
int i=0;
printf("\u521d\u59cb\u5b57\u7b26\u5217\u8868:\n");
while(i<SIZE && str[i])
{
puts(str[i]);
i++;
}
}

1.#include
2.int main(void)
3.{
4.int I,P,D;
5.printf("\u8bf7\u8f93\u5165\u5f53\u6708\u5229\u6da6\u503c\n");
6.scanf("%d",&I);
7.D=I/100000;
8.switch(D)
9.{
10.case 0:
11.printf("%lf\n",0.1*I);
12.break;
13.case 1:
14.printf("%lf\n",0.075*(I-100000)+10000);
15.break;
16.case 2:
17.printf("%lf\n",0.05*(I-200000)+17500);
18.break;
19.case 3:
20.printf("%lf\n",0.05*(I-200000)+17500);
21.break;
22.case 4:
23.printf("%lf\n",0.03*(I-400000)+27500);
24.break;
25.case 5:
26.printf("%lf\n",0.03*(I-400000)+27500);
27.break;
28.case 6:
29.printf("%lf\n",0.015*(I-600000)+33500);
30.break;
31.case 7:
32.printf("%lf\n",0.015*(I-600000)+33500);
33.break;
34.case 8:
35.printf("%lf\n",0.015*(I-600000)+33500);
36.break;
37.case 9:
38.printf("%lf\n",0.015*(I-600000)+33500);
39.break;
40.default:
41.printf("\u8f93\u5165\u6570\u636e\u9519\u8bef!\n");
42.break;
43.}
44.if (I >= 1000000)
45.printf("%lf\n",0.01*(I-1000000)+39500);
46.return 0;
47.system("pause");
48.}


\u89c4\u8303\u5199\u6cd5
\u6700\u4e3b\u8981\u7684\u9519\u8bef\uff08\u7b2c\u516d\u884c\uff09\u5c31\u662f\u5c11\u4e86\u4e2a&\u7b26\uff0c\u53d6\u5730\u5740
\u8fd8\u6709\u5c31\u662fcase\u8bed\u53e5\u91cc\u7684%d\u8981\u6539\u4e3a%f\u6216%lf\u8868\u793a\u6d6e\u70b9\u6570
\u8fd8\u6709\u6211\u7ed9\u4f60\u52a0\u4e86\u4e00\u53e5system("pause");\u53ef\u4ee5\u8ba9\u7cfb\u7edf\u6682\u505c\u4e00\u4e0b\u4e0b\uff0c\u4fbf\u4e8e\u67e5\u770b\u7ed3\u679c
\u8fd8\u6709\u4e3b\u51fd\u6570\u7684\u6807\u51c6\u5199\u6cd5\u662fint main(void){},\u4e5f\u53ef\u4ee5\u795e\u7565void

怎么说,这里面错误实在是太多了。

先说main()函数,第一,缺返回值,少一句return 0;第二,str和strin都是指向字符串常量,肯定不能修改啊,要想修改,也要声明成字符串数组啊。

再说insert()函数,第一,里面临时的数组变量strcp根本传不到函数的外面,不能这样传递,应该覆盖原先传入的数组中,比如说s中;第二,对于第二个for循环不是p,应该是*p。



修改的代码如下:

main函数

int main(void)
{
    char str[50] = "Hello world!";
    char strin[] = "big";
    int i;
    printf("请输入想要接入的位置:
");
    scanf("%d", &i);
    insert(str, strin, i);
    printf("
%s", str);
    _getch();
    return 0;
}

insert函数

void insert(char *s, char *q, int n)
{
    int i = 0;
    char *str, strcp[50];
    str = s;
    for (i = 0; *str != '\0'; i++)
    {
        if (i == n - 1)
        {
            for (; *q != '\0'; q++)
            {
                strcp[i] = *q;
                i++;
            }
        }
        strcp[i] = *str;
        str++;
    }
    strcp[i + 1] = '\0';
    strcpy(s, strcp);
}

结果如下:



算法没细看,不知道对错,像是插入一个字符串。这段代码面有个很严重的问题,即时是你运行正确,也不能这样写。
char *str, strcp[50];
str = strcp;
......
return str;
就是这段。strcp是个局部变量,是分配在栈中的,在insert函数返回之后,这个空间就被退栈而释放出来,你却把这个已经不属于它的地址返回后交给后面printf使用,很可能会产生异常

  • c绋嬪簭鏈韩娌$湅鍒伴敊璇,浣嗕竴杩愯杈撳叆鏁版嵁鍚庡氨鎶ラ敊,鑰屼笖涓嶇煡閬撳摢閲屽嚭閿檁鐧 ...
    绛旓細鍏堣main()鍑芥暟锛岀涓锛岀己杩斿洖鍊硷紝灏戜竴鍙eturn 0锛涚浜岋紝str鍜宻trin閮芥槸鎸囧悜瀛楃涓插父閲忥紝鑲畾涓嶈兘淇敼鍟婏紝瑕佹兂淇敼锛屼篃瑕佸0鏄庢垚瀛楃涓叉暟缁勫晩銆傚啀璇磇nsert()鍑芥暟锛岀涓锛岄噷闈复鏃剁殑鏁扮粍鍙橀噺strcp鏍规湰浼犱笉鍒板嚱鏁扮殑澶栭潰锛屼笉鑳借繖鏍蜂紶閫掞紝搴旇瑕嗙洊鍘熷厛浼犲叆鐨勬暟缁勪腑锛屾瘮濡傝s涓紱绗簩锛屽浜庣浜屼釜for寰幆...
  • 绋嬪簭鏈韩娌℃湁妫鏌ュ嚭閿欒銆浣嗘槸杩愯鏃,鍒癕ergeList(La,Lb,Lc)鏃,绐佺劧...
    绛旓細澶氫簡锛岄昏緫閿欒灏辫嚜宸辨參鎱㈡敼鍚с俰nclude <stdio.h> include <stdlib.h> include <string.h> define LIST_INIT_SIZE 100 define LISTINCREMENT 10 define OVERFLOW -2 define OK 1 typedef struct{ int *elem;int length;int listsize;}List;void main(){void MergeList();List La,Lb,Lc;int i...
  • c璇█涓,绋嬪簭娌℃湁閿欒浣嗘槸杩愯鍚庡嵈涓嶆樉绀
    绛旓細鍥犱负浠g爜娌℃湁闂锛屽彧鏄緭鍏ユ椂瑕佸厛杈撳叆涓暟n锛屽啀杈撳叆n涓暟锛屾渶鍚庤緭鍏ヤ竴涓鎵剧殑鏁扳斺旇繖浠g爜娌℃湁杈撳叆閿欒鎻愮ず锛屾墍浠ヨ緭鍏ラ敊浜嗗氨娌℃湁杈撳嚭锛岀瓑寰呬笅涓娆¤緭鍏ャ傝屼笖锛屼唬鐮佹槸澶氱粍寰幆锛岃嫢瑕侀鍑猴紝寰楄緭鍏ヤ袱娆trl+z閿紝鍚﹀垯鍟ヤ篃涓嶆樉绀虹瓑寰呬笅涓杞緭鍏ャ傛瘮濡備綘杈撳叆4鈫(鈫欒〃绀哄洖杞)锛屽啀杈撳叆1 2 3 4(绌烘牸闅...
  • c璇█绋嬪簭鏄剧ず娌℃湁闂浣嗚繍琛缁撴灉鏄┖鐧界殑?
    绛旓細鎮ㄥソ锛屽緢楂樺叴鍥炵瓟鎮ㄧ殑闂銆傚湪c璇█涓紝绋嬪簭鐨勯敊璇垎鎴愪袱绉嶏紝涓绉嶆槸璇硶閿欒锛岀▼搴忓湪杩涜杩愯杩囩▼涓細妫娴嬪嚭鏉ワ紝骞朵笖缁欏嚭閿欒鐨勫ぇ鑷翠綅缃拰鍘熷洜锛屽彟涓绉嶉敊璇槸閫昏緫閿欒锛岃閫氫織鐐瑰氨鏄▼搴忔病鏈夎娉曢敊璇紝浣嗘槸绋嬪簭鍐呴儴鍑虹幇浜嗕笉绗﹀悎棰樼洰鏈剰鐨勯敊璇紝瀵艰嚧涓嶈兘寰楀嚭姝g‘缁撴灉锛岃繖绉嶈鏄病鏈夋彁绀虹殑锛岃缂栧啓鑰呰嚜宸卞幓...
  • C璇█闂 娌℃湁閿欒,浣嗘槸杩愯灏辫嚜鍔ㄥ叧闂
    绛旓細閭f槸鍥犱负绋嬪簭杩愯瀹屼簡鍑虹幇灞忓箷涓涓嬪瓙灏辨秷澶变簡锛屽浜庤繖绉嶉棶棰樹綘鍙互璁╁睆骞曟殏鍋滀竴涓嬶紝浣犲氨鍙互鐪嬪埌缁撴灉浜嗐傚湪C閲屽彲浠ョ敤涓涓猤etchar()锛屽彧鏈夊湪浣犱换鎰忔暡涓涓嬮敭鐩樹笂鐨勪竴閿悗绋嬪簭鎵嶅紑濮嬬户缁墽琛岋紱涔熷彲浠ョ敤涓涓皟鐢ㄦ搷浣滅郴缁熼噷鐨勫嚱鏁皊ystem("pause")浣犺瘯涓涓嬪槢锛屾瘮濡傝浣犵殑杩欐绋嬪簭鐨勮瘽灏卞湪涓诲嚱鏁扮殑new();...
  • 涓涓c璇█闂,涓轰粈涔堜笉鎶ラ敊,浣嗙▼搴忚繍琛鍒颁竴鍗婂氨宕╂簝浜嗗憿?
    绛旓細浣犵殑浠g爜涔辨垚涓鍥 涓嶅繊鐩磋 涓嶈繃锛屼綘鍙互璇曠潃鑷繁鍘绘壘閿欒 鐢#if #endif缁勫悎鎶婁唬鐮佸垎鎴愪竴灏忔涓灏忔鍦板幓灏濊瘯缂栬瘧 缂栬瘧鎴愬姛涓斾笉浼氬穿婧冭鏄庝唬鐮佹娌¢棶棰 濡傛灉宕╂簝浜嗗氨鎶婇偅涓唬鐮佹鍐嶇粏鍒 鐩村埌鎵惧嚭鍑洪棶棰樼殑涓鍙ヤ唬鐮 鍐嶄粩缁嗙湅鐪 鎴栬浣犱細鎭嶇劧澶ф偀 ...
  • c绋嬪簭娌鎶ラ敊銆浣嗘槸杩愯涔嬪悗鍗存槸杩欐牱鐨勩傛眰澶х甯垜鐪嬬湅銆
    绛旓細杩欐槑鏄炬槸浠g爜閿欒锛鎬庝箞鑳借浠g爜姝e父锛熻屼笖寰堝彲鑳藉彂鐢熷湪涓诲嚱鏁颁腑锛屽彲鎯滀富鍑芥暟鐨勫唴瀹圭湅涓嶅叏锛
  • 鎬ユユ,C璇█绋嬪簭娌℃湁閿欒,涓轰粈涔绋嬪簭杩愯鏃舵诲仠姝㈠伐浣
    绛旓細鏄笉鏄綘瀹氫箟鐨勬暟缁勫湪涓诲嚱鏁伴噷锛熸爤婧㈠嚭浜嗐傚敖閲忔妸鏁扮粍瀹氫箟鍦ㄤ富鍑芥暟澶栵紝闃叉婧㈠嚭銆傚惁鍒欏氨鏈夊彲鑳藉仠姝㈠伐浣溿
  • c璇█缂栫▼,娌℃湁鎻愮ず閿欒,鍙槸涓杩愯,涓嶇瓑閿洏杈撳叆,鐩存帴灏辨墽琛屽畬浜嗐
    绛旓細杩欐牱鏀瑰惂锛歷oid main(){ begin:char ch;printf("璇疯緭鍏ヤ竴涓ぇ鍐欏瓧姣嶏細 \n");ch=getchar();//scanf ("%c",&ch);if(64<ch&&ch<91)//鍘绘帀鍗曞紩鍙 { ch=ch+32;printf("%C\n", ch);//杈撳叆ch缁撴灉 } else { printf("杈撳叆閿欒锛");goto begin;} system("pause");} ...
  • 浠g爜鏄剧ず娌℃湁閿欒,浣嗘槸杩愯鐨勬椂鍊欒緭鍏ュ悗鍥炶溅娌℃湁杈撳嚭,浠g爜濡備笅(c璇█...
    绛旓細杩欎釜鏄緭鍏ユ牸寮閿欒閫犳垚鐨勶紝杩涜濡備笅淇敼灏卞彲浠ヤ簡锛堣娉ㄩ噴閮ㄥ垎锛夛細include<stdio.h>int main (){ int i,N; float m,sum,x=1.0,y=2.0; scanf("%d",&N);//鏁存暟鐢%d for(i=1,sum=0;i<=N;i++) { sum=sum+y/x; m=y; y=x+y; x=m; } p...
  • 扩展阅读:怎么运行chkdsk检查硬盘 ... c语言没错但是运行不了 ... chkdsk 三阶段不动了 ... xbox acc驱动程序无法使用 ... 程序都会出现哪些错误 ... 开机强制跳过chkdsk ... 运行时错误 拒绝的权限 ... w11总是收集错误让重启 ... 程序运行时错误是为什么 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网