c언어 초기화되지 않은 search 지역 변수를 사용했습니다 오류

happyoht11의 이미지

#include
#include
#include
/*typedef struct ListNode
{
element data;
struct ListNode *link;
}ListNode;*/
typedef struct AddressList
{
char StudentNumber[50];
char Name[50];
char PhoneNumber[50];
char Email[50];
struct AddressList *next;
}AddressList;
AddressList *head = NULL;
void display()
{
struct AddressList *p;
p = head;
p = p->next;
while (p != 0)
{
printf("\n이름: %s 전화번호: %s", p->Name, p->PhoneNumber);
p = p->next;
}
printf("\n");
}
void Add(char *Name, char *StudentNumber, char *PhoneNumber, char *Email)
{
AddressList *data;
AddressList *pdata;
data = head;
while (head !=NULL&&data->next)
{
data = data->next;
}
pdata = (AddressList*)malloc(sizeof(AddressList));
strcpy_s(pdata->Name,50,Name);
strcpy_s(pdata->Email,50,Email);
strcpy_s(pdata->StudentNumber,50,StudentNumber);
strcpy_s(pdata->PhoneNumber,50,PhoneNumber);
pdata->next = NULL;
data = pdata;
printf("등록 완료");
} //data입력 함수
//void DataOutput(struct AddressList *); //data출력 함수
//ListNode StudentNumber, Name, PhoneNumber, Email;
void SubChoice2()
{
AddressList *p, *temp, *before;
int SubChoice2;
char Name[50];
char StudentNumber[50];
char PhoneNumber[50];
printf("------------------\n");
printf("1.이름으로 삭제\n");
printf("2.학번으로 삭제\n");
printf("3.전화번호로 삭제\n");
printf("------------------\n");
printf("번호를 선택하시오.\n");
scanf_s("%d", &SubChoice2);
switch (SubChoice2)
{
case 1:
printf("이름 :");
scanf_s("%s", Name,50);
p = head;
while (p != NULL)
{
if (strcmp(p->Name, Name) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", Name);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", Name);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", Name);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
case 2:
printf("학번 :");
scanf_s("%s", StudentNumber, 50);
p = head;
while (p != NULL)
{
if (strcmp(p->StudentNumber, StudentNumber) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", StudentNumber);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
case 3:
printf("전화번호 :");
scanf_s("%s", PhoneNumber, 50);
p = head;
while (p != NULL)
{
if (strcmp(p->PhoneNumber, PhoneNumber) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", PhoneNumber);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
}
}
void SubChoice3()
{
int SubChoice3;
AddressList *Search;

printf("------------------\n");
printf("1.이름으로 검색\n");
printf("2.학번으로 검색\n");
printf("3.전화번호로 검색\n");
printf("------------------\n");
printf("번호를 선택하시오.\n");
scanf_s("%d", &SubChoice3);
char Name[50];
char StudentNumber[50];
char PhoneNumber[50];
switch (SubChoice3)
{
case 1:
scanf_s("%s", Name,50);

while (1)
{
if (strcmp(Search->Name, Name) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
case 2:
scanf_s("%s", StudentNumber,50);
while (1)
{
if (strcmp(Search->StudentNumber, StudentNumber) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
case 3:
scanf_s("%s", PhoneNumber,50);
while (1)
{
if (strcmp(Search->PhoneNumber, PhoneNumber) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
}

}
/*void displayi(struct node *r)
{
r = head;
if (r == NULL)
{
return;
}
while (r != NULL)
{
printf("%d ", r->data);
r = r->data->next;
}
printf("\n");
}*/
int main()
{
int MainChoice;
printf("----------------\n");
printf("1.주소 등록\n");
printf("2.주소 삭제\n");
printf("3.주소 검색\n");
printf("----------------\n");
printf("원하는 기능의 번호를 선택하시오.");
scanf_s("%d", &MainChoice);
switch (MainChoice)
{
case 1:
printf("---------------------\n");
printf("이름 :");
char Name[50];
scanf_s("%s", Name,50);
printf("\n학번 :");
char StudentNumber[50];
scanf_s("%s", StudentNumber,50);
printf("\n전화번호 :");
char PhoneNumber[50];
scanf_s("%s", PhoneNumber,50);
printf("\n이메일 :");
char Email[50];
scanf_s("%s", Email,50);
printf("--------------------");
Add(Name,StudentNumber,PhoneNumber,Email);
main();
break;
case 2:
SubChoice2();
break;
case 3:
SubChoice3();
case 4:
if (head == NULL)
{
printf("List is Empty\n");
}
else
{
printf("Element(s) in the list are : ");
}
break;
}
return 0;
}
여기에서 제목과 같은 오류가 void Subchoice2()-case1-if (strcmp(p->Name, Name) == 0)에서 발견되었습니다. 그런데 어떻게 고쳐야 되는지 모르겠습니다. 프로그래밍 능력자분들 부탁드립니다.

twinwings의 이미지

1. 소스코드는 (code) (/code) 로 감싸주세요.(괄호는 꺾인 괄호로)
저러면 아무도 못 읽습니다.

2. 컴파일 오류 적으실거면 컴파일러와 컴파일 오류 코드를 포함해서 보여주세요.
또, 질문하기전에 먼저 구글에 해당 에러코드로 검색해보세요.

3. strcpy_s() 보니까 VS 쓰시는 것 같은데,
MS VS에서는 최근 C언어를 더 이상 지원 하지 않습니다.

C언어와 C++언어는 다른 언어입니다.
두 언어의 교집합이 있을지언정 C++이 C를 온전하게 포함하지는 않습니다.

세벌의 이미지

질문하신 내용을 code 블럭으로 감싸 봤습니다. #include 다음에 나오는 헤더 파일은 제가 대충 추측해서 넣어봤습니다. indentation은 질문 올리신 분이 code 블럭안에 넣어서 올리시면 다시 살아날 겁니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*typedef struct ListNode
{
element data;
struct ListNode *link;
}ListNode;*/
typedef struct AddressList
{
char StudentNumber[50];
char Name[50];
char PhoneNumber[50];
char Email[50];
struct AddressList *next;
}AddressList;
AddressList *head = NULL;
 
void display()
{
struct AddressList *p;
p = head;
p = p->next;
while (p != 0) 
{
printf("\n이름: %s 전화번호: %s", p->Name, p->PhoneNumber);
p = p->next;
}
printf("\n");
}
 
void Add(char *Name, char *StudentNumber, char *PhoneNumber, char *Email)
{
AddressList *data;
AddressList *pdata;
data = head;
while (head !=NULL&&data->next)
{
data = data->next;
}
pdata = (AddressList*)malloc(sizeof(AddressList));
strcpy_s(pdata->Name,50,Name);
strcpy_s(pdata->Email,50,Email);
strcpy_s(pdata->StudentNumber,50,StudentNumber);
strcpy_s(pdata->PhoneNumber,50,PhoneNumber);
pdata->next = NULL;
data = pdata;
printf("등록 완료");
}	//data입력 함수
 
//void DataOutput(struct AddressList *); //data출력 함수
//ListNode StudentNumber, Name, PhoneNumber, Email;
 
void SubChoice2()
{
AddressList *p, *temp, *before;
int SubChoice2;
char Name[50];
char StudentNumber[50];
char PhoneNumber[50];
printf("------------------\n");
printf("1.이름으로 삭제\n");
printf("2.학번으로 삭제\n");
printf("3.전화번호로 삭제\n");
printf("------------------\n");
printf("번호를 선택하시오.\n");
scanf_s("%d", &SubChoice2);
switch (SubChoice2)
{
case 1:
printf("이름 :");
scanf_s("%s", Name,50);
p = head;
while (p != NULL)
{
if (strcmp(p->Name, Name) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", Name);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", Name);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", Name);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
case 2:
printf("학번 :");
scanf_s("%s", StudentNumber, 50);
p = head;
while (p != NULL)
{
if (strcmp(p->StudentNumber, StudentNumber) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", StudentNumber);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
case 3:
printf("전화번호 :");
scanf_s("%s", PhoneNumber, 50);
p = head;
while (p != NULL)
{
if (strcmp(p->PhoneNumber, PhoneNumber) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", PhoneNumber);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
}
}
 
void SubChoice3()
{
int SubChoice3;
AddressList *Search;
 
printf("------------------\n");
printf("1.이름으로 검색\n");
printf("2.학번으로 검색\n");
printf("3.전화번호로 검색\n");
printf("------------------\n");
printf("번호를 선택하시오.\n");
scanf_s("%d", &SubChoice3);
char Name[50];
char StudentNumber[50];
char PhoneNumber[50];
switch (SubChoice3)
{
case 1:
scanf_s("%s", Name,50);
 
while (1)
{
if (strcmp(Search->Name, Name) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
case 2:
scanf_s("%s", StudentNumber,50);
while (1)
{
if (strcmp(Search->StudentNumber, StudentNumber) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
case 3:
scanf_s("%s", PhoneNumber,50);
while (1)
{
if (strcmp(Search->PhoneNumber, PhoneNumber) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
}
 
}
 
/*void displayi(struct node *r)
{
r = head;
if (r == NULL)
{
return;
}
while (r != NULL)
{
printf("%d ", r->data);
r = r->data->next;
}
printf("\n");
}*/
int main()
{
int MainChoice;
printf("----------------\n");
printf("1.주소 등록\n");
printf("2.주소 삭제\n");
printf("3.주소 검색\n");
printf("----------------\n");
printf("원하는 기능의 번호를 선택하시오.");
scanf_s("%d", &MainChoice);
switch (MainChoice)
{
case 1:
printf("---------------------\n");
printf("이름 :");
char Name[50];
scanf_s("%s", Name,50);
printf("\n학번 :");
char StudentNumber[50];
scanf_s("%s", StudentNumber,50);
printf("\n전화번호 :");
char PhoneNumber[50];
scanf_s("%s", PhoneNumber,50);
printf("\n이메일 :");
char Email[50];
scanf_s("%s", Email,50);
printf("--------------------");
Add(Name,StudentNumber,PhoneNumber,Email);
main();
break;
case 2:
SubChoice2();
break;
case 3:
SubChoice3();
case 4:
if (head == NULL)
{
printf("List is Empty\n");
}
else
{
printf("Element(s) in the list are : ");
}
break;
}
return 0;
}

위 소스코드를 ex2.c 로 저장하여
gcc -Wall ex2.c

해봤습니다. 아래와 같은 에러가 나네요.

ex2.c: In function ‘Add’:
ex2.c:40:1: warning: implicit declaration of function ‘strcpy_s’ [-Wimplicit-function-declaration]
ex2.c: In function ‘SubChoice2’:
ex2.c:63:1: warning: implicit declaration of function ‘scanf_s’ [-Wimplicit-function-declaration]
ex2.c:52:18: warning: unused variable ‘temp’ [-Wunused-variable]
ex2.c: In function ‘SubChoice3’:
ex2.c:194:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘char *’ [-Wformat]
ex2.c:205:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘char *’ [-Wformat]
ex2.c:216:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘char *’ [-Wformat]
/tmp/ccFjpUfk.o: In function `Add':
ex2.c:(.text+0xb7): undefined reference to `strcpy_s'
ex2.c:(.text+0xd7): undefined reference to `strcpy_s'
ex2.c:(.text+0xf1): undefined reference to `strcpy_s'
ex2.c:(.text+0x10e): undefined reference to `strcpy_s'
/tmp/ccFjpUfk.o: In function `SubChoice2':
ex2.c:(.text+0x1a2): undefined reference to `scanf_s'
ex2.c:(.text+0x1ee): undefined reference to `scanf_s'
ex2.c:(.text+0x384): undefined reference to `scanf_s'
ex2.c:(.text+0x50b): undefined reference to `scanf_s'
/tmp/ccFjpUfk.o: In function `SubChoice3':
ex2.c:(.text+0x6ed): undefined reference to `scanf_s'
/tmp/ccFjpUfk.o:ex2.c:(.text+0x72c): more undefined references to `scanf_s' follow
collect2: ld returned 1 exit status

에러메시지에는 안 나타나지만 SubChoice2를 함수이름으로도 변수이름으로도 사용하신게 보이네요. 이러면 헷갈리지 않나요? 일부러 그리하신 건지는 모르겠지만...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.