① c代碼 報錯「段錯誤」
程序沒有錯誤。這是編譯器的預設錯誤,我忘記那裡了,
for(int
id;
)
//一些編譯器把他當作全局變數
,一些當作for循環的變數,這個你可以更改編譯設置,就好了。我以前在vs2003遇到過,不過你還是定義全局變數,不要在for循環定義變數,這樣不管編譯器怎麼預設,自己都不會錯
② C語言中的NULL
在頭文件 中 定義的一個常量 NULL=0;
用於指將指針 懸空(不指向任何位置)樓上的指向0內存不對的.
int *p=NULL;
NULL是個好東西,給一出生的指針一個安分的家
NULL不是被定義為0,就是被定義為(void *)0,這兩種值幾乎是相同的。當程序中需要一個指針時(盡管編譯程序並不是總能指示什麼時候需要一個指針),一個純粹的零或者一個void指針都能自動被轉換成所需的任何類型的指針。
NULL總是等於0嗎?
對這個問題的回答與「等於」所指的意思有關。如果是指「與。比較的結果為相等」,例如:
if(/* ... */)
{
p=NULL;
}
else
{
p=/* something else */;
}
/* ... */
if(p==0)
那麼NULL確實總是等於0,這也就是空指針定義的本質所在。
如果是指「其存儲方式和整型值。相同」,那麼答案是「不」。NULL並不必須被存為一個整型值0,盡管這是NULL最常見的存儲方式。在有些計算機中,NULL會被存成另外一些形式。
如果想知道NULL是否被存為一個整型值0,可以(並且只能)通過調試程序來查看空指針的值,或者通過程序直接將空指針的值列印出來(如果將一個空指針強制轉換成整類型,那麼=所看到的很可能就是一個非零值)。
簡單看了一下你的程序
首先,你沒有給出完整的程序,這個讓大夥看起來確實不方便,因為沒有main函數,可能踩內存的地方並不是這個函數本身,是main函數
其次說你的這個函數,貌似確實有點問題,但是由於沒有完整的程序,我只說出我的理解,如果有錯,直接忽視就好
sprintf(flag_height,"%03d",i+1);
sprintf(flag_width,"%03d",j+1);
我覺得問題出在這里,你查下
sprintf
的用法,第一個參數應該是一個字元串的首地址,你寫的確實沒有錯,參數給入的是一個地址flag_height,但是縱觀你的程序,你並沒有給這個指針賦值,程序運行到這里,估計在默認創建指針的時候應該賦值為NULL(貌似根據編譯器不同而有不同),那個定址後報出段錯誤,也是意料之中了
由於沒有你完整的代碼,不知道你要做什麼,修改意見不好提
給出個人意見,僅供參考
如果要列印flag_height中的值,首先應該給flag_height指針分配一片內存,使用malloc函數,其次在向內從中寫入值,然後調用sprintf,就應該沒有問題了
④ C語言編譯後無結果輸出
樓主。 達到效果了啊。。
完全達到了 啊。。
樓主你題目裡面字母和數字之間是兩個空格!!!!!!!!!
要不,你自己算,如論如何數字的道理跟字母一樣!!!
奇數在偶數位置上!!!
#include <stdio.h>
#include <string.h>
void fun(char *s,char t[])
{
int k,n=0;
for(k=0; k<(int )strlen(s); k++) //這里建議強制轉換,就沒有警告了。
if(k%2==1 && s[k]%2==1)
t[n++]=s[k];
t[n]='\0';
}
void main()
{
char s[100],t[100];
printf("Please enter string S:");
gets(s);//這里函數不能是scanf
/*因為scanf一旦遇到空格就不會繼續讀字元。也就是說你的S裡面其實只放了
ABCDEGFG 巧合的是,你發現沒有偶數位上的都是奇數,也就是什麼也不輸出了
後面又不在S裡面。不信你該全部是AAAAAAAAAAAAAAAAAAAAAAAAAA 123456試試*/
fun(s,t);
printf(" The result is: %s\n",t);
}
⑤ C語言的字元串中如果有空格,在輸出時編譯器是怎麼判斷這個空格不是字元串結尾的'\0'
字元串里的空格是 ' '
而不是'\0',
'\0'是字元串結束標識符,代表整個字元串的結束
而空格是屬於字元串里的一部分
⑥ c 語言 :段錯誤
p沒有指向任何地方,默認的指針都是NULL
然後你就直接*p,這個時候不知道該引用哪塊內存了,因為p是null
只能 int* p =(int*) malloc(sizeof(int));
這樣把一塊內存的地址給p,*p的時候就引用那塊內存了
⑦ linux 下運行c出現段錯誤!!
我猜想錯誤的原因是:
char * c = "hello";//該c是一個指針,指向「hello」
reverse(c);
函數
void reverse(char * a)
{
int len = strlen(a);//該strlen函數是計算a的長度,以'\n'為結束,所以len可能不是5;
⑧ C語言大神幫看,為什麼輸入1之後輸出為空白
程序有一點小BUG,第五行單引號應該變成雙引號。
除此之外是沒問題的,輸入1後會輸出數字1,然後不換行,之後輸出sum的值0,所以你看到的輸出應該是10。
但我猜測,你想要的效果可能不是這樣,或許你可以在第五行輸出中加上\n,在第六行else後和倒數第二行末尾分別添上左右大括弧,看看這是不是你想要的。
另外,之前那個回答不用太在意,他沒看題目,批量復制騙採納的。
⑨ C語言中怎樣輸出空格 用printf("\ ")行不行
直接輸入空格就可以了,或者輸入「\t」相當於輸入一個「Tab"
⑩ c語言 輸出段錯誤 為甚嘛呢
strcat()函數是從數組source[]數組的第一個『\0』開始將後一個參數中的字元復制上去的,你定義時造成source[]數組只能容納三個字元,再將其它字元串復制時,空間不夠用,就造成了段錯誤,段錯誤是對非法地址的操作造成的
#include <string.h>
#include <stdio.h>
int main(int argc,char **argv)
{
char *from_web_url="henhao";
char *p="good";
char source[100]="{{";
strcat(source,from_web_url);
strcat(source,"}}");
strcat(source,p);
printf("%s\n", source);
return 0;
}