inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

매개구조체 포인터?없이 이중포인터로 원래 구조체접근

미해결

홍정모의 따라하며 배우는 C언어

안녕하세요 이 글은 제가 오개념을 가지고 그냥 운좋게 실행되는 코드를 짜낸것인지 좀 불안한 마음이 역력해서 드리는 질문글입니다. 10:51 부분이며 교수님께서 짜신 read_books2 함수는 (포인터가 널인지 아닌지 체크하는 유효성 검사 코드 같은 것들은 생략했습니다) void read_books2(const char* filename, struct book** books_dptr, int* n_ptr) { FILE* fp = fopen(filename, "r"); fscanf(fp, "%d%*c", n_ptr); struct book* books = (struct book*)calloc(*n_ptr, sizeof(struct book)); for (int i = 0; i < *n_ptr; ++i) { fscanf(fp, "%[^\n]%*c%[^\n]%*c", books[i].name, books[i].author); } fclose(fp); *books_dptr = books; } 이고, 제가 작성한 코드는 void read_books2(const char* filename, struct book** books_dptr, int* n) { FILE* fp = fopen(filename, "r"); fscanf(fp, "%d%*c", n); *books_dptr = (struct book*)calloc(*n, sizeof(struct book)); for (int i = 0; i < *n; ++i) { fscanf(fp, "%[^\n]%*c%[^\n]%*c", (*books_dptr)[i].name, (*books_dptr)[i].author); } fclose(fp); } 입니다. 전체코드는 맨 아래에 있습니다. 교수님께서는 함수 내부에 새로운 구조체 포인터 *books 를 만들어서 파일로부터 읽어들인 값들을 정리했고 그 구조체의 주소값을 *books_dptr = books 를 통해 원래 main함수 안에 있던 my_books 로 직접 넘겨주셨습니다. 그런데 저는 매개없이 가져온 주소에 직접 *books_dptr = (struct book*)calloc(*n, sizeof(struct book)); 이렇게 메모리를 조정해줬고 (교수님께서는 = 좌변에 직접 새로운 구조체 포인터를 만드셨습니다) 후에 fscanf(fp, "%[^\n]%*c%[^\n]%*c", (*books_dptr)[i].name, (*books_dptr)[i].author); 처럼 txt파일로부터 읽은 것을 함수매개변수를 통해 가져온 주소에 직접 가서 값을 넣었습니다. 혹시 이 방식에서 우려하실 부분은 없으실까요? 감사합니다. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <conio.h> #define SLEN 101 #define FILE_NAME "books.txt" struct book { char name[SLEN]; char author[SLEN]; }; void print_books(const struct book* books, int n); void write_books(const char* filename, const struct book* books, int n); struct book* read_books(const char* filename, int* n); void read_books2(const char* filename, struct book** books_dptr, int* n); int main() { int temp; int n = 3; struct book* my_books = (struct book*)malloc(sizeof(struct book) * n); if (!my_books) { printf("malloc() has failed"); exit(EXIT_FAILURE); } my_books[0] = (struct book){ "The Great Gatsby", "F. Scott Fitzgerald" }; my_books[1] = (struct book){ "Hamlet", "William Shakespeare" }; my_books[2] = (struct book){ "The Odyssey", "Homer" }; print_books(my_books, n); printf("\nWriting to a file...\n"); write_books(FILE_NAME, my_books, n); free(my_books); n = 0; printf("Done.\n"); printf("\nPress any key to read data from a file.\n\n"); temp = _getch(); read_books2(FILE_NAME, &my_books, &n); //my_books = read_books(FILE_NAME, &n); print_books(my_books, n); free(my_books); n = 0; return 0; } void print_books(const struct book* books, int n) { for (int i = 0; i < n; ++i) { printf("Book %d : \"%s\" written by \"%s\"\n", i + 1, books[i].name, books[i].author); } } void write_books(const char* filename, const struct book* books, int n) { FILE* fp = fopen(filename, "w"); fprintf(fp, "%d\n", n); for (int i = 0; i < n; ++i) { fprintf(fp, "%s\n%s\n", books[i].name, books[i].author); } fclose(fp); } struct book* read_books(const char* filename, int* n) { FILE* fp = fopen(filename, "r"); fscanf(fp, "%d%*c", n); struct book* lits = (struct book*)calloc(*n, sizeof(struct book)); for (int i = 0; i < *n; ++i) { fscanf(fp, "%[^\n]%*c%[^\n]%*c", lits[i].name, lits[i].author); } fclose(fp); return lits; } void read_books2(const char* filename, struct book** books_dptr, int* n) { FILE* fp = fopen(filename, "r"); fscanf(fp, "%d%*c", n); *books_dptr = (struct book*)calloc(*n, sizeof(struct book)); for (int i = 0; i < *n; ++i) { fscanf(fp, "%[^\n]%*c%[^\n]%*c", (*books_dptr)[i].name, (*books_dptr)[i].author); } fclose(fp); }

  • c
Echapper4 댓글 1 좋아요 1 조회수 307

(정보) mac homebrew h2 데이터베이스 설치하는 법

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. ./h2.sh: line 3: 6284 Trace/BPT trap: 5 java -cp "$dir/h2-2.2.224.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Console "$@" 위와 같은 에러가 뜨시는 분, homebrew 삭제하거나 jdk 다시 설치하지 않고 h2 데이터베이스를 설치하는 방법이 있습니다. Homebrew 가 설치되어 있다면 이 방법을 사용할 수 있습니다. > brew install h2 > h2 -web 이 방법으로 h2 데이터베이스를 설치하고 web url을 얻을 수 있습니다.

  • java
  • spring
  • mvc
  • spring-boot
콰이엇 댓글 2 좋아요 6 조회수 927

템플릿 코드에서 if cur_v not in costs: 부분에 의문이 있습니다.

해결됨

코딩테스트 [ ALL IN ONE ]

def dijkstra(graph, start, final): # 각 노드들의 비용을 저장 costs = {} # 우선순위 큐 pq = [] # (해당위치까지 가는 총 비용, 노드위치) heapq.heappush(pq, (0, start)) while pq: # heappop을 하면 가장 작은 원소가 튀어 나온다. cur_cost, cur_v = heapq.heappop(pq) # 방문하지 않은 백터 일때만 작동 if cur_v not in costs: # costs[cur_v] = cur_cost for cost, next_v in graph[cur_v]: next_cost = cur_cost + cost heapq.heappush(pq, (next_cost, next_v)) return costs[final] 해당 템플릿 코드중에서 if cur_v not in costs: costs[cur_v] = cur_cost 어떻게 costs에 cur_v가 없다는 것 만으로 바로 최적의 경로라고 확신할 수 있는지 의문이 있습니다. heapq의 성질덕에 cur_cost, cur_v가 '지금까지 heap에 넣은 값들중에' 가장 작은 값 인거는 알겠는데 다른 경로를 통해 뒤늦게 heap에 들어간 값이 이전에 costs에 not in이여서 넣은 값보다 작은 경우도 있지 않나요?? 뭔가 제 생각에 자연스럽지 않아서 다른 코드들을 찾아보니 아래와 같이 제가 생각한 조건대로 대소 비교를 해보고 넣더군요. def dijkstra(graph,start,end): costs = {vertex:111111 for vertex in graph} pq = [] heapq.heappush(pq,(0,start)) while pq: cur_cost, cur_v = heapq.heappop(pq) if costs[cur_v] < cur_cost: continue for cost, next_v in graph[cur_v]: next_cost = cur_cost + cost if next_cost < costs[next_v]: costs[next_v] = next_cost heapq.heappush(pq, (next_cost, next_v)) return costs[end] " '지금까지 heap에 넣은 값들중에' 가장 작은 값 " 이 아니라 앞으로 나올 값 중에 가장 작은 근거가 있을까요?? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

  • python
  • 코딩-테스트
  • 알고리즘
  • 다익스트라
김민수 댓글 2 좋아요 1 조회수 345

GenerationType.IDENTITY Null값 허용 안 되는 에러

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요. 기본 키 맵핑에서 GenerationType.IDENTITY 관련 부분 질문드립니다. GenerationType.IDENTITY는 PK를 입력하지 않아도 auto increment라고 해서 저절로 생성되는 거 아닌가요? 그런데 이런 에러가 떴습니다. ERROR: NULL not allowed for column "ID"; SQL statement: 답변 부탁드리겠습니다. 감사합니다! package hellojpa; import javax.persistence.*; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String username; public Member() { // 기본 생성자가 하나 있어야 함 } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import javax.transaction.Transaction; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // EntityManagerFactory는 application 로딩 시점에 딱 하나만 만들어놔야 한다. // Transaction 단위로 EntityManager를 만든다. EntityManager em = emf.createEntityManager(); // 쉽게 생각하면 데이터베이스 connection을 하나 받았다고 생각할 수 있음. EntityTransaction tx = em.getTransaction(); tx.begin(); try{ Member member = new Member(); member.setUsername("Opeahchsdf"); em.persist(member); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); // 끝나면 반드시 닫아줘야 함 } emf.close(); } } <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> </persistence-unit> </persistence>

  • java
  • jpa
이주현 댓글 3 좋아요 0 조회수 1225

needToCatchEvent 오류

해결됨

스마트 컨트랙트 이벤트 모듈 배우고 학습하기

event Transfer 감지가 안되고 있습니다. 오타확인했을 경우에도 문제가 없었음에도 불구하고 질무드립니다. c.needToCatchEvent = map[common.Hash]types.NeedToCatchEvent{ common.BytesToHash(crypto.Keccak256([]byte("Transfer(address,address,uint256"))): { NeedToCatchEventFunc: c.Transfer, }, } 코드는 이렇게 됩니다. 추가적으로 address는 0xbB9260Fc0d1427B7A014B6993D84e75f88Cd700C mint 블록 44961870 입니다.

  • event
JUNI 댓글 3 좋아요 0 조회수 464

redirect & try/catch 질문

미해결

Next + React Query로 SNS 서비스 만들기

redirect는 try/catch문 안에 있으면 안돼서 그 위해 shouldRedirect의 값으로 조건문을 만들어 if문 안에서만 redirect하게 하셨는데, 이후에 catch문에서 return을 넣어주시더라고요. 그러면 shouldRedirect라는 변수를 쓰지 않아도 어차피 catch문이 실행된 경우에는 return 되니까 redirect를 아래에 그냥 배치해도 상관없지 않나 질문드립니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
j44s11 댓글 1 좋아요 0 조회수 396

멱등

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

[질문 내용] 안녕하세요.ㅎ 좋은 수업 해주셔서 감사합니다. POST 는 멱등이 아니라는데요, ( 결재가 두번됨 ) 멱등의 필요성이 타임아웃등의 이유로 정상음답을 못주었을떄 같은 요청을 다시해도 판단 근거가 된다고 설명해주셨는데. 결제시 (POST) 시 정상 응답이 없으면,정상 응답이 없다는건 결제가 제대로 되지 않았다는 뜻이며 , 이경우 다시 같은 요청을 반복해도 되는거 아닌가요????

  • 네트워크
슈퍼맨~ 댓글 2 좋아요 0 조회수 601

@ModelAttribute 관련 static 처리와 th:field 부분 질문드립니다

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 내용] 안녕하십니까 강의 정말 잘 듣고 있습니다. 두 가지 질문 드리려고 하는데요! 5분 50초 경에 @ModelAttribute("regions") public Map<String, String> regions() { Map<String, String> regions = new LinkedHashMap<>(); regions.put("SEOUL", "서울"); .. return regions; } 부분 설명해주시면서 별도의 메서드마다 별도로 처리하는 것보다는 static으로 처리를 하면 더 좋다는 설명을 해주셨습니다. static으로 처리하는 것의 예시가 궁금합니다. 어떻게 처리를 해야할지 감이 잘 안와서요!! ㅎㅎ ㅠ <!-- multi checkbox --> <input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input"> th:field="*{regions}" 와 th:value="${region.key}" 의 값을 비교해서 checked 설정을 해준다는 설명 부분이 이해가 잘안갑니다..ㅠ th:field="*{regions}" 를 적용했을 때 id 값과 name값 value값을 편리하게 설정해준다는 개념만 이해가 되는데 사용자가 항목을 체크하면 th:field="*{reigons}" 에 어떤 값들이 들어가는것인지 , 어떻게 비교를 하는 것인지 잘 모르겠습니다... 감사합니다..!

  • spring
  • mvc
s2사랑해요s2김영한s2 댓글 1 좋아요 3 조회수 488

URL 링크 표현식 질문

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] CSS의 경우 th:href="@{/css/bootstrap.min.css}"이고 다른 경우에는 th:href="@{/basic/items/add}"처럼 되어있습니다. 궁금한 점은 css는 static상위 폴더에 basic은 templates 상위 폴더에 위치하는데 이를 구분하는 것이 url에 명시가 되어있지 않은데 어떻게 구분이 되는 걸까요??

  • spring
  • mvc
sde101573 댓글 2 좋아요 0 조회수 378

정답은 어디서볼수있나요?

미해결

홍정모의 게임 만들기 연습 문제 패키지

강의 마지막에 직접 진행보라는 내용에 대한 답은 없는건가요? 굉장히 당황스럽네요;;

  • c++
  • 객체지향
  • OpenGL
경태 댓글 2 좋아요 1 조회수 387

파이토치와 비교하며 Numpy 라이브러리 사용법 익히기2 질문입니다.

해결됨

처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part3]

약 11분 경에 행렬 곱셈을 설명하는 부분에서 "앞 행렬의 행의 갯수와 뒷 행렬의 열의 갯수가 같아야 행렬간 곱셈이 가능하다"고 되어있는데 제가 알기로는 (n, k) @ (k, m) = (n, m) 이어서 앞 행렬의 열의 갯수와 뒷 행렬의 행의 갯수가 같아야 행렬 곱셈이 가능하다고 알고 있습니다. 제가 알고 있는게 맞을까요? 검색해봐도 설명이 이렇게 나와서 어느것이 맞는지 질문드립니다.

  • 머신러닝
  • 딥러닝
  • 인공신경망
  • pytorch
  • vision-transformer
nureongi0214 댓글 2 좋아요 0 조회수 314

7-M 반례 질문입니다!

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요, 큰돌님! 16235 문제를 풀던 중 아래 코드가 왜 안되는지 궁금합니다. 맵에 각각 벡터를 넣지 않고 총 살아있는 나무를 넣는 우선순위 큐를 사용해서 구현 해보았습니다. 우선순위 큐는 나이를 기준으로 오름차순 합니다. https://www.acmicpc.net/source/72058303 반례는 이것인데, 제 논리 대로라면 된다고 생각하는데 여기서 잘못된 답을 뱉어내네요... 5 2 7 2 3 2 3 2 2 3 2 3 2 2 3 2 3 2 2 3 2 3 2 2 3 2 3 2 2 1 3 3 2 3 답 : 71

  • c++
  • 코딩-테스트
김동훈 댓글 2 좋아요 0 조회수 226

GPT api 토큰 제한

미해결

모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 2 - 랭체인(LangChain)으로 나만의 ChatGPT 만들기

안녕하세요. 강의 잘 듣고 있습니다. 한 가지 궁금한 것이 있는데, SQL agent로 많은 데이터셋을 넣어주면서 질문을 할 경우 GPT4 api 를 사용했을 때 금방 하루 토큰을 다 사용했다고 뜹니다. 개인 api는 하루용 토큰이 이렇게 금방 소진 되어 테스트를 많이 해볼 수가 없어서요, 그러면 기업용으로 api를 구매하면 하루에 사용 가능한 토큰에 제한이 없는지 궁금합니다.

  • chatgpt
  • langchain
  • api
YG 댓글 1 좋아요 0 조회수 1804

ReviewDto 객체 사용 이유

해결됨

쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS

리뷰 목록 페이지를 조회할 때 마지막에 ReviewDto 객체로 변환해서 반환을 하는데 이렇게 하는 이유가 무엇인지 궁금합니다

  • spring
  • git
  • docker
  • spring-boot
  • jpa
  • github
haha 댓글 2 좋아요 0 조회수 340

컨트롤러에서 뷰템플릿을 반환해서 응답하는 경우에 메소드의 반환값이 void일떄

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 응답 -정적리소스,뷰템플릿 강의에서 궁금한것있습니다. 컨트롤러에서 뷰 템플릿을 응답으로 반환하는경우를 학습중인데요. 강의에 설명에서는 Void를 반환하는경우에 @Controller를 사용하고 HttpServletResponse,OutputStream(Writer) 같은 HTTP 메시지 바디를 처리하는 파라미터가 없으면 요청 URL을 참고해서 논리 뷰 이름으로 사용한다. 라고 되어 있는데요. 그러면 메서드 매개변수에 위 2개의 파라미터( HttpServletResponse,OutputStream(Writer) )가 들어가있을경우에는 정상적으로 반환되어야 하지 않는것이 맞는것인가요? 두개의 파라매터를 메서드 매개변수에 적용하여 실행해봐도 정상적으로 동작하기에 질문드립니다. 아래는 해당 코드 입니다. //너무 불명확해서 추천하지 않는방식 //컨트롤러를 사용하고 httpServlerResponse 나 ,outputStream 같은 HTTP 메시지 바디를 처리하는 //파라메터가 없으면 요청 URL을 참고해서 논리뷰의 이름으로 사용 @RequestMapping("/response/hello") //반환할 정적 리소스의 경로랑 맵핑이 같을경우 return 값이 없어도 된다. public void responseViewV3(Model model, HttpServletResponse response) throws IOException { response.getWriter().write("ok"); model.addAttribute("data","hello!"); }

  • spring
  • mvc
Super Novice 댓글 1 좋아요 0 조회수 321

테스트시 로그가 뜨지 않는다면 어떻게 해야하나요?

미해결

스프링 핵심 원리 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요?예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/ 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] 테스트 시 로그가 뜨지 않습니다!

  • spring
  • 객체지향
임수진 댓글 1 좋아요 0 조회수 477

length에서 min값만 설정하고 싶을 때 max 없이 validationOptions을 어떻게 전달할 수 있나요..?

미해결

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

length에서 max값을 전달 안해주고 min만 설정하고 싶을때 if(args.constraints.length===2){ } else}{ } 여기서 else 가 실행되어야 하는데 max 값 없이 validationOptions만을 전달하면 validationOptions가 두번째 인자로 전달되는 것 아닌가요..? 이렇게 하면 에러 나는데.. max 값에 undefined나 null을 넣어도 안되는 것 같습니다. 어떻게 max 값 없이 validationOptions를 실행할 수 있나요..?

  • javascript
  • typescript
  • rest-api
  • nestjs
  • backend
purnsup90 댓글 2 좋아요 0 조회수 357

보일러 플레이트 확인

해결됨

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

안녕하세요! 제가 설치도구들을 다운 받고 강의를 이어 듣는데, 제 플레이터와 선생님이 보여주신 초기 화면이 달라서 어느 부분이 잘못되었는지 확인 받고 싶습니다!

  • react
  • node.js
  • seo
  • graphql
  • next.js
현준인뒈요 댓글 2 좋아요 0 조회수 306

인기 태그

인프런 TOP Writers

주간 인기글