簡體   English   中英

為什么在使用變量作為指向字符數組的指針調用函數時會出現分段錯誤?

[英]Why do I get Segmentation fault while calling function with variable as pointer to character array?

我是使用字符數組指針的新手。 如果我使用主函數 1 運行代碼,它會正常運行並打印“hello”字而沒有任何錯誤。但是在使用第二個主函數時,我會因分段錯誤而出錯。

我試圖找出它,但不明白這里的問題是什么。 實際上我的目標是使用帶有指向字符數組的指針的第二個主函數(因為我只有那種形式的數據)。 如何使用第二個主函數執行代碼以獲得與主函數 1 相同的結果?

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

void enmToStng(char varState[])
{
    strcpy(varState,"hello");
}
//main function 1
int main(void)
{
    char varState[]= {"1"};
    enmToStng(varState);
    printf("varState = %s\n", varState);
    return 0;   
}
//main function 2
/*int main(void)
{
    char *varState[]= {"1","2","3"};
    enmToStng(varState[1]);
    printf("varState[1] = %s\n", varState[1]);
    return 0;   
}*/     

您聲明了一個字符串,其中只有兩個元素( 1 and \\0 )的空間,但是隨后您在其中復制了hello 7 個字符,您不能這樣做,因為您沒有足夠的空間。

你可以使用這樣的東西

void enmToStng(char varState[])
{
    varState = malloc(7);
    strcpy(varState, "hello");
}

PS:由於您沒有通過引用發送varState ,因此在main您將打印1 not hello

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM